Index: content/renderer/gpu/gpu_benchmarking_extension.cc |
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc |
index 299c5f37476c025ccb57ef69c7ed1f1a64c328e2..8d45c727a5fc1850921f9ba0f33262e2bfa44abe 100644 |
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc |
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc |
@@ -11,8 +11,10 @@ |
#include "base/file_util.h" |
#include "base/memory/scoped_vector.h" |
#include "base/string_number_conversions.h" |
+#include "cc/layer_tree_host.h" |
#include "content/common/gpu/gpu_rendering_stats.h" |
#include "content/public/renderer/render_thread.h" |
+#include "content/public/renderer/v8_value_converter.h" |
#include "content/renderer/all_rendering_benchmarks.h" |
#include "content/renderer/render_view_impl.h" |
#include "content/renderer/rendering_benchmark.h" |
@@ -23,10 +25,12 @@ |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewBenchmarkSupport.h" |
#include "v8/include/v8.h" |
+#include "webkit/compositor_bindings/web_layer_tree_view_impl.h" |
#include "webkit/compositor_bindings/web_rendering_stats_impl.h" |
using WebKit::WebCanvas; |
using WebKit::WebFrame; |
+using WebKit::WebLayerTreeViewImpl; |
using WebKit::WebPrivatePtr; |
using WebKit::WebRenderingStatsImpl; |
using WebKit::WebSize; |
@@ -154,6 +158,10 @@ class GpuBenchmarkingWrapper : public v8::Extension { |
"chrome.gpuBenchmarking.beginWindowSnapshotPNG = function(callback) {" |
" native function BeginWindowSnapshotPNG();" |
" BeginWindowSnapshotPNG(callback);" |
+ "};" |
+ "chrome.gpuBenchmarking.layerTreeAsValue = function() {" |
+ " native function LayerTreeAsValue();" |
+ " LayerTreeAsValue();" |
"};") {} |
virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
@@ -168,6 +176,8 @@ class GpuBenchmarkingWrapper : public v8::Extension { |
return v8::FunctionTemplate::New(RunRenderingBenchmarks); |
if (name->Equals(v8::String::New("BeginWindowSnapshotPNG"))) |
return v8::FunctionTemplate::New(BeginWindowSnapshotPNG); |
+ if (name->Equals(v8::String::New("LayerTreeAsValue"))) |
+ return v8::FunctionTemplate::New(LayerTreeAsValue); |
return v8::Handle<v8::FunctionTemplate>(); |
} |
@@ -443,6 +453,38 @@ class GpuBenchmarkingWrapper : public v8::Extension { |
return v8::Undefined(); |
} |
+ |
+ static v8::Handle<v8::Value> LayerTreeAsValue( |
+ const v8::Arguments& args) { |
+ WebFrame* web_frame = WebFrame::frameForCurrentContext(); |
+ if (!web_frame) |
+ return v8::Undefined(); |
+ |
+ WebView* web_view = web_frame->view(); |
+ if (!web_view) |
+ return v8::Undefined(); |
+ |
+ RenderViewImpl* render_view_impl = RenderViewImpl::FromWebView(web_view); |
+ if (!render_view_impl) |
+ return v8::Undefined(); |
+ |
+ WebLayerTreeViewImpl* layer_tree_view_impl = |
+ static_cast<WebLayerTreeViewImpl*>(render_view_impl->layerTreeView()); |
piman
2013/02/12 04:55:07
This is a content::RenderWidgetCompositor now... M
|
+ |
+ if (!layer_tree_view_impl) |
+ return v8::Undefined(); |
+ |
+ cc::LayerTreeHost* cc_layer_tree_host = |
+ layer_tree_view_impl->layer_tree_host(); |
+ if (!cc_layer_tree_host) |
+ return v8::Undefined(); |
+ |
+ scoped_ptr<base::Value> value = cc_layer_tree_host->asValue(); |
+ scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
+ v8::Persistent<v8::Context> context = |
+ v8::Persistent<v8::Context>::New(web_frame->mainWorldScriptContext()); |
+ return converter->ToV8Value(value.get(), context); |
+ } |
}; |
v8::Extension* GpuBenchmarkingExtension::Get() { |