summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorcaseq@chromium.org <caseq@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-23 13:28:22 +0000
committercaseq@chromium.org <caseq@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-23 13:28:22 +0000
commit6e89eb7aa21c001b0d1d77abea5dd7fe8743920d (patch)
tree4fe682eb86dab0e0356ca7356ef569eaa35333a2 /cc
parent707e480c59b4332dfc0b41a50ffcefecd1767344 (diff)
downloadchromium_src-6e89eb7aa21c001b0d1d77abea5dd7fe8743920d.zip
chromium_src-6e89eb7aa21c001b0d1d77abea5dd7fe8743920d.tar.gz
chromium_src-6e89eb7aa21c001b0d1d77abea5dd7fe8743920d.tar.bz2
Add LayerTreeHostClient::{will,did}UpdateLayer, report layer updates to DevTools
This adds instrumentation methods that mark layer updates. Note that we don't use trace event based instrumentation, as we only want to receive events related to the inspected page. Related blink change: https://codereview.chromium.org/16878004 BUG=244505 R=jamesr@chromium.org, nduca@chromium.org Review URL: https://codereview.chromium.org/16848010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213090 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/debug/devtools_instrumentation.h25
-rw-r--r--cc/trees/layer_tree_host.cc17
-rw-r--r--cc/trees/layer_tree_host.h2
3 files changed, 41 insertions, 3 deletions
diff --git a/cc/debug/devtools_instrumentation.h b/cc/debug/devtools_instrumentation.h
index 7b2ea1a..7a77d40 100644
--- a/cc/debug/devtools_instrumentation.h
+++ b/cc/debug/devtools_instrumentation.h
@@ -13,16 +13,18 @@ namespace devtools_instrumentation {
namespace internal {
const char kCategory[] = "cc,devtools";
const char kLayerId[] = "layerId";
+const char kLayerTreeId[] = "layerTreeId";
}
const char kPaintLayer[] = "PaintLayer";
const char kRasterTask[] = "RasterTask";
const char kImageDecodeTask[] = "ImageDecodeTask";
const char kPaintSetup[] = "PaintSetup";
+const char kUpdateLayer[] = "UpdateLayer";
class ScopedLayerTask {
public:
- explicit ScopedLayerTask(const char* event_name, int layer_id)
+ ScopedLayerTask(const char* event_name, int layer_id)
: event_name_(event_name) {
TRACE_EVENT_BEGIN1(internal::kCategory, event_name_,
internal::kLayerId, layer_id);
@@ -32,6 +34,26 @@ class ScopedLayerTask {
}
private:
const char* event_name_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedLayerTask);
+};
+
+class ScopedLayerTreeTask {
+ public:
+ ScopedLayerTreeTask(const char* event_name,
+ int layer_id,
+ uint64 tree_id)
+ : event_name_(event_name) {
+ TRACE_EVENT_BEGIN2(internal::kCategory, event_name_,
+ internal::kLayerId, layer_id, internal::kLayerTreeId, tree_id);
+ }
+ ~ScopedLayerTreeTask() {
+ TRACE_EVENT_END0(internal::kCategory, event_name_);
+ }
+ private:
+ const char* event_name_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedLayerTreeTask);
};
struct ScopedLayerObjectTracker
@@ -43,6 +65,7 @@ struct ScopedLayerObjectTracker
layer_id) {
}
+ private:
DISALLOW_COPY_AND_ASSIGN(ScopedLayerObjectTracker);
};
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 12d81f3..0d90c59 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -18,6 +18,7 @@
#include "cc/animation/layer_animation_controller.h"
#include "cc/base/math_util.h"
#include "cc/debug/benchmark_instrumentation.h"
+#include "cc/debug/devtools_instrumentation.h"
#include "cc/debug/overdraw_metrics.h"
#include "cc/debug/rendering_stats_instrumentation.h"
#include "cc/input/top_controls_manager.h"
@@ -73,6 +74,8 @@ scoped_ptr<LayerTreeHost> LayerTreeHost::Create(
return layer_tree_host.Pass();
}
+static int s_next_tree_id = 1;
+
LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client,
const LayerTreeSettings& settings)
: animating_(false),
@@ -97,11 +100,11 @@ LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client,
has_transparent_background_(false),
partial_texture_update_requests_(0),
in_paint_layer_contents_(false),
- total_frames_used_for_lcd_text_metrics_(0) {
+ total_frames_used_for_lcd_text_metrics_(0),
+ tree_id_(s_next_tree_id++) {
if (settings_.accelerated_animation_enabled)
animation_registrar_ = AnimationRegistrar::Create();
s_num_layer_tree_instances++;
-
rendering_stats_instrumentation_->set_record_rendering_stats(
debug_state_.RecordRenderingStats());
}
@@ -883,6 +886,10 @@ void LayerTreeHost::PaintMasksForRenderSurface(Layer* render_surface_layer,
Layer* mask_layer = render_surface_layer->mask_layer();
if (mask_layer) {
+ devtools_instrumentation::ScopedLayerTreeTask
+ update_layer(devtools_instrumentation::kUpdateLayer,
+ mask_layer->id(),
+ id());
*did_paint_content |= mask_layer->Update(queue, NULL);
*need_more_updates |= mask_layer->NeedMoreUpdates();
}
@@ -891,6 +898,10 @@ void LayerTreeHost::PaintMasksForRenderSurface(Layer* render_surface_layer,
render_surface_layer->replica_layer() ?
render_surface_layer->replica_layer()->mask_layer() : NULL;
if (replica_mask_layer) {
+ devtools_instrumentation::ScopedLayerTreeTask
+ update_layer(devtools_instrumentation::kUpdateLayer,
+ replica_mask_layer->id(),
+ id());
*did_paint_content |= replica_mask_layer->Update(queue, NULL);
*need_more_updates |= replica_mask_layer->NeedMoreUpdates();
}
@@ -934,6 +945,8 @@ void LayerTreeHost::PaintLayerContents(
PaintMasksForRenderSurface(
*it, queue, did_paint_content, need_more_updates);
} else if (it.represents_itself()) {
+ devtools_instrumentation::ScopedLayerTreeTask
+ update_layer(devtools_instrumentation::kUpdateLayer, it->id(), id());
DCHECK(!it->paint_properties().bounds.IsEmpty());
*did_paint_content |= it->Update(queue, &occlusion_tracker);
*need_more_updates |= it->NeedMoreUpdates();
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index 63e8aec..0fd3abb 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -253,6 +253,7 @@ class CC_EXPORT LayerTreeHost : NON_EXPORTED_BASE(public RateLimiterClient) {
bool in_paint_layer_contents() const { return in_paint_layer_contents_; }
bool UsingSharedMemoryResources();
+ int id() const { return tree_id_; }
protected:
LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSettings& settings);
@@ -367,6 +368,7 @@ class CC_EXPORT LayerTreeHost : NON_EXPORTED_BASE(public RateLimiterClient) {
int64 total_num_cc_layers_will_use_lcd_text;
};
LCDTextMetrics lcd_text_metrics_;
+ int tree_id_;
DISALLOW_COPY_AND_ASSIGN(LayerTreeHost);
};