From 5dcd286d3e3e60f6a090f775a1fdceb40f578b75 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Wed, 13 Jul 2011 12:58:41 -0700 Subject: Tile profiling backend Added tile profiling member (TilesProfiler) to TilesManager to track rendering status of tiles. Change-Id: Ied828c6ad2a15588965e6641edecb162bd76bc62 --- .../platform/graphics/android/TilesProfiler.cpp | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Source/WebCore/platform/graphics/android/TilesProfiler.cpp (limited to 'Source/WebCore/platform/graphics/android/TilesProfiler.cpp') diff --git a/Source/WebCore/platform/graphics/android/TilesProfiler.cpp b/Source/WebCore/platform/graphics/android/TilesProfiler.cpp new file mode 100644 index 0000000..5c6aaa0 --- /dev/null +++ b/Source/WebCore/platform/graphics/android/TilesProfiler.cpp @@ -0,0 +1,119 @@ +/* + * Copyright 2010, The Android Open Source Project + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "TilesProfiler.h" + +#if USE(ACCELERATED_COMPOSITING) + +#include + +#ifdef DEBUG + +#include +#include + +#undef XLOG +#define XLOG(...) android_printLog(ANDROID_LOG_DEBUG, "TilesProfiler", __VA_ARGS__) + +#else + +#undef XLOG +#define XLOG(...) + +#endif // DEBUG + +// Hard limit on amount of frames (and thus memory) profiling can take +#define MAX_PROF_FRAMES 400 + +namespace WebCore { +TilesProfiler::TilesProfiler() + : m_enabled(false) +{ +} + +void TilesProfiler::start() +{ + m_enabled = true; + m_goodTiles = 0; + m_badTiles = 0; + m_records.clear(); + m_time = currentTimeMS(); + XLOG("initializing tileprofiling"); +} + +float TilesProfiler::stop() +{ + m_enabled = false; + XLOG("completed tile profiling, observed %d frames", m_records.size()); + return (1.0 * m_goodTiles) / (m_goodTiles + m_badTiles); +} + +void TilesProfiler::clear() +{ + XLOG("clearing tile profiling of its %d frames", m_records.size()); + m_records.clear(); +} + +void TilesProfiler::nextFrame(int l, int t, int r, int b) +{ + if (!m_enabled || (m_records.size() > MAX_PROF_FRAMES)) + return; + + double currentTime = currentTimeMS(); + double timeDelta = currentTime - m_time; + m_time = currentTime; + +#ifdef DEBUG + if (m_records.size() != 0) { + XLOG("completed tile profiling frame, observed %d tiles. %f ms since last", + m_records[0].size(), timeDelta); + } +#endif // DEBUG + + m_records.append(WTF::Vector()); + + //first two records designate viewport + m_records.last().append(TileProfileRecord(l, t, true, (int)(timeDelta * 1000))); + m_records.last().append(TileProfileRecord(r, b, true, -1)); + +} + +void TilesProfiler::nextTile(int x, int y, bool isReady, int level, bool inView) +{ + if (!m_enabled || (m_records.size() > MAX_PROF_FRAMES)) + return; + if (inView) { + if (isReady) + m_goodTiles++; + else + m_badTiles++; + } + m_records.last().append(TileProfileRecord(x, y, isReady, level)); +} + +} // namespace WebCore + +#endif // USE(ACCELERATED_COMPOSITING) -- cgit v1.1