| Index: cc/layer_tree_host_impl.cc
|
| diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
|
| index 607a50c2344ce9bc1810702f5238d2507b535de4..e357999dcb264deb268a5c190e8f2662127359c6 100644
|
| --- a/cc/layer_tree_host_impl.cc
|
| +++ b/cc/layer_tree_host_impl.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/json/json_writer.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/stl_util.h"
|
| +#include "base/stringprintf.h"
|
| #include "cc/append_quads_data.h"
|
| #include "cc/compositor_frame_metadata.h"
|
| #include "cc/damage_tracker.h"
|
| @@ -29,6 +30,7 @@
|
| #include "cc/overdraw_metrics.h"
|
| #include "cc/page_scale_animation.h"
|
| #include "cc/paint_time_counter.h"
|
| +#include "cc/picture_layer_tiling.h"
|
| #include "cc/prioritized_resource_manager.h"
|
| #include "cc/quad_culler.h"
|
| #include "cc/render_pass_draw_quad.h"
|
| @@ -58,6 +60,13 @@ void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible)
|
| TRACE_EVENT_ASYNC_END0("webkit", "LayerTreeHostImpl::setVisible", id);
|
| }
|
|
|
| +std::string ValueToString(scoped_ptr<base::Value> value)
|
| +{
|
| + std::string str;
|
| + base::JSONWriter::Write(value.get(), &str);
|
| + return str;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace cc {
|
| @@ -163,6 +172,8 @@ LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre
|
| DCHECK(m_proxy->isImplThread());
|
| didVisibilityChange(this, m_visible);
|
|
|
| + setDebugState(settings.initialDebugState);
|
| +
|
| if (settings.calculateTopControlsPosition)
|
| m_topControlsManager = TopControlsManager::Create(this, settings.topControlsHeight);
|
|
|
| @@ -801,6 +812,11 @@ void LayerTreeHostImpl::drawLayers(FrameData& frame)
|
| if (m_debugState.showHudRects())
|
| m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.renderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenSpaceRects, m_debugState);
|
|
|
| + if (m_debugState.traceAllRenderedFrames) {
|
| + TRACE_EVENT_INSTANT1("cc.debug", "Frame",
|
| + "frame", ValueToString(frameStateAsValue()));
|
| + }
|
| +
|
| // Because the contents of the HUD depend on everything else in the frame, the contents
|
| // of its texture are updated as the last thing before the frame is drawn.
|
| if (m_activeTree->hud_layer())
|
| @@ -928,6 +944,8 @@ void LayerTreeHostImpl::createPendingTree()
|
| m_client->onCanDrawStateChanged(canDraw());
|
| m_client->onHasPendingTreeStateChanged(pendingTree());
|
| TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", m_pendingTree.get());
|
| + TRACE_EVENT_ASYNC_STEP0("cc",
|
| + "PendingTree", m_pendingTree.get(), "waiting");
|
| }
|
|
|
| void LayerTreeHostImpl::checkForCompletedTileUploads()
|
| @@ -937,25 +955,6 @@ void LayerTreeHostImpl::checkForCompletedTileUploads()
|
| m_tileManager->CheckForCompletedTileUploads();
|
| }
|
|
|
| -scoped_ptr<base::Value> LayerTreeHostImpl::activationStateAsValue() const
|
| -{
|
| - scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
|
| - state->SetBoolean("visible_resources_ready", pendingTree()->AreVisibleResourcesReady());
|
| - state->Set("tile_manager", m_tileManager->AsValue().release());
|
| - return state.PassAs<base::Value>();
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -std::string ValueToString(scoped_ptr<base::Value> value)
|
| -{
|
| - std::string str;
|
| - base::JSONWriter::Write(value.get(), &str);
|
| - return str;
|
| -}
|
| -
|
| -}
|
| -
|
| void LayerTreeHostImpl::activatePendingTreeIfNeeded()
|
| {
|
| if (!pendingTree())
|
| @@ -974,8 +973,11 @@ void LayerTreeHostImpl::activatePendingTreeIfNeeded()
|
| // or tile manager has no work scheduled for pending tree.
|
| if (activeTree()->RootLayer() &&
|
| !pendingTree()->AreVisibleResourcesReady() &&
|
| - m_tileManager->HasPendingWorkScheduled(PENDING_TREE))
|
| + m_tileManager->HasPendingWorkScheduled(PENDING_TREE)) {
|
| + TRACE_EVENT_ASYNC_STEP0("cc",
|
| + "PendingTree", m_pendingTree.get(), "waiting");
|
| return;
|
| + }
|
|
|
| activatePendingTree();
|
| }
|
| @@ -1695,6 +1697,33 @@ base::TimeTicks LayerTreeHostImpl::currentFrameTime()
|
| return m_currentFrameTime;
|
| }
|
|
|
| +scoped_ptr<base::Value> LayerTreeHostImpl::asValue() const
|
| +{
|
| + scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
|
| + state->Set("activation_state", activationStateAsValue().release());
|
| + state->Set("frame_state", frameStateAsValue().release());
|
| + return state.PassAs<base::Value>();
|
| +}
|
| +
|
| +scoped_ptr<base::Value> LayerTreeHostImpl::activationStateAsValue() const
|
| +{
|
| + scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
|
| + state->SetString("lthi_id", StringPrintf("%p", this));
|
| + state->SetBoolean("visible_resources_ready", pendingTree()->AreVisibleResourcesReady());
|
| + state->Set("tile_manager", m_tileManager->BasicStateAsValue().release());
|
| + return state.PassAs<base::Value>();
|
| +}
|
| +
|
| +scoped_ptr<base::Value> LayerTreeHostImpl::frameStateAsValue() const
|
| +{
|
| + scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
|
| + state->SetString("lthi_id", StringPrintf("%p", this));
|
| + state->Set("device_viewport_size", MathUtil::asValue(m_deviceViewportSize).release());
|
| + if (m_tileManager)
|
| + state->Set("tiles", m_tileManager->AllTilesAsValue().release());
|
| + return state.PassAs<base::Value>();
|
| +}
|
| +
|
| // static
|
| LayerImpl* LayerTreeHostImpl::getNonCompositedContentLayerRecursive(LayerImpl* layer)
|
| {
|
|
|