| 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());
|
| +
|
| + 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() {
|
|
|