Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: content/renderer/gpu/gpu_benchmarking_extension.cc

Issue 10537036: Added rendering benchmark javascript hook (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: renaming Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 8590e1116b855eaadbe95d5ba3ac47d569435e58..d62f6b91c9938920a9e808c8b5e4b9754773c2e6 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -3,14 +3,22 @@
// found in the LICENSE file.
#include "content/renderer/gpu/gpu_benchmarking_extension.h"
+
+#include <string>
+
+#include "content/public/renderer/all_rendering_benchmarks.h"
+#include "content/public/renderer/render_thread.h"
+#include "content/public/renderer/rendering_benchmark_results.h"
#include "content/renderer/render_view_impl.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewBenchmarkSupport.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
#include "v8/include/v8.h"
using WebKit::WebFrame;
+using WebKit::WebPrivatePtr;
+using WebKit::WebViewBenchmarkSupport;
using WebKit::WebRenderingStats;
using WebKit::WebView;
@@ -21,6 +29,33 @@ using WebKit::WebView;
namespace content {
+// Benchmark results object that populates a v8 array.
+class V8BenchmarkResults : public content::RenderingBenchmarkResults {
+ public:
+ explicit V8BenchmarkResults(v8::Handle<v8::Array> results_array)
+ : results_array_(results_array) { }
+ virtual ~V8BenchmarkResults() {}
+
+ void addResult(const std::string& benchmark_name,
+ const std::string& result_name,
+ const std::string& time_unit,
+ double time) {
+ v8::Handle<v8::Object> result = v8::Object::New();
+ result->Set(v8::String::New("benchmarkName", 13),
+ v8::String::New(benchmark_name.c_str(), -1));
+ result->Set(v8::String::New("resultName", 10),
+ v8::String::New(result_name.c_str(), -1));
+ result->Set(v8::String::New("timeUnit", 8),
+ v8::String::New(time_unit.c_str(), -1));
+ result->Set(v8::String::New("time", 4), v8::Number::New(time));
+ int size = results_array_->Length();
+ results_array_->Set(size, result);
+ }
+
+ private:
+ v8::Handle<v8::Array> results_array_;
+};
+
class GpuBenchmarkingWrapper : public v8::Extension {
public:
GpuBenchmarkingWrapper() :
@@ -45,6 +80,10 @@ class GpuBenchmarkingWrapper : public v8::Extension {
" scroll_far = scroll_far || false;"
" native function BeginSmoothScroll();"
" return BeginSmoothScroll(false, scroll_far);"
+ "};"
+ "chrome.gpuBenchmarking.runRenderingBenchmarks = function(filter) {"
+ " native function RunRenderingBenchmarks();"
+ " return RunRenderingBenchmarks(filter);"
"};") {}
virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
@@ -53,7 +92,8 @@ class GpuBenchmarkingWrapper : public v8::Extension {
return v8::FunctionTemplate::New(GetRenderingStats);
if (name->Equals(v8::String::New("BeginSmoothScroll")))
return v8::FunctionTemplate::New(BeginSmoothScroll);
-
+ if (name->Equals(v8::String::New("RunRenderingBenchmarks")))
+ return v8::FunctionTemplate::New(RunRenderingBenchmarks);
return v8::Handle<v8::FunctionTemplate>();
}
@@ -103,6 +143,42 @@ class GpuBenchmarkingWrapper : public v8::Extension {
render_view_impl->BeginSmoothScroll(scroll_down, scroll_far);
return v8::True();
}
+
+ static v8::Handle<v8::Value> RunRenderingBenchmarks(
+ const v8::Arguments& args) {
+ // for our name filter, the argument can be undefined or null to run
+ // all benchmarks, or a string for filtering by name
+ if (!args.Length() ||
+ (!args[0]->IsString() &&
+ !(args[0]->IsNull() || args[0]->IsUndefined())))
+ return v8::Undefined();
+
+ WebFrame* web_frame = WebFrame::frameForEnteredContext();
+ if (!web_frame)
+ return v8::Undefined();
+
+ WebView* web_view = web_frame->view();
+ if (!web_view)
+ return v8::Undefined();
+
+ v8::Handle<v8::Array> resultsArray = v8::Array::New(0);
+ V8BenchmarkResults results(resultsArray);
+ std::string nameFilter;
+ if (args[0]->IsNull() || args[0]->IsUndefined()) {
+ nameFilter = "";
+ } else {
+ char filter[256];
+ args[0]->ToString()->WriteAscii(filter, 0, sizeof(filter)-1);
+ nameFilter = std::string(filter);
+ }
+ WebViewBenchmarkSupport* support =
+ web_view->benchmarkSupport();
+ content::AllRenderingBenchmarks allBenchmarks(&results, nameFilter);
+ allBenchmarks.SetUp(support);
+ allBenchmarks.Run(support);
+ allBenchmarks.TearDown(support);
+ return resultsArray;
+ }
};
v8::Extension* GpuBenchmarkingExtension::Get() {

Powered by Google App Engine
This is Rietveld 408576698