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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/gpu/gpu_benchmarking_extension.h" 5 #include "content/renderer/gpu/gpu_benchmarking_extension.h"
6
7 #include <string>
8
9 #include "content/public/renderer/all_rendering_benchmarks.h"
10 #include "content/public/renderer/render_thread.h"
11 #include "content/public/renderer/rendering_benchmark_results.h"
6 #include "content/renderer/render_view_impl.h" 12 #include "content/renderer/render_view_impl.h"
7 #include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h " 13 #include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h "
8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebViewBenchmarkSuppo rt.h"
9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
11 #include "v8/include/v8.h" 17 #include "v8/include/v8.h"
12 18
13 using WebKit::WebFrame; 19 using WebKit::WebFrame;
20 using WebKit::WebPrivatePtr;
21 using WebKit::WebViewBenchmarkSupport;
14 using WebKit::WebRenderingStats; 22 using WebKit::WebRenderingStats;
15 using WebKit::WebView; 23 using WebKit::WebView;
16 24
17 const char kGpuBenchmarkingExtensionName[] = "v8/GpuBenchmarking"; 25 const char kGpuBenchmarkingExtensionName[] = "v8/GpuBenchmarking";
18 26
19 using WebKit::WebFrame; 27 using WebKit::WebFrame;
20 using WebKit::WebView; 28 using WebKit::WebView;
21 29
22 namespace content { 30 namespace content {
23 31
32 // Benchmark results object that populates a v8 array.
33 class V8BenchmarkResults : public content::RenderingBenchmarkResults {
34 public:
35 explicit V8BenchmarkResults(v8::Handle<v8::Array> results_array)
36 : results_array_(results_array) { }
37 virtual ~V8BenchmarkResults() {}
38
39 void addResult(const std::string& benchmark_name,
40 const std::string& result_name,
41 const std::string& time_unit,
42 double time) {
43 v8::Handle<v8::Object> result = v8::Object::New();
44 result->Set(v8::String::New("benchmarkName", 13),
45 v8::String::New(benchmark_name.c_str(), -1));
46 result->Set(v8::String::New("resultName", 10),
47 v8::String::New(result_name.c_str(), -1));
48 result->Set(v8::String::New("timeUnit", 8),
49 v8::String::New(time_unit.c_str(), -1));
50 result->Set(v8::String::New("time", 4), v8::Number::New(time));
51 int size = results_array_->Length();
52 results_array_->Set(size, result);
53 }
54
55 private:
56 v8::Handle<v8::Array> results_array_;
57 };
58
24 class GpuBenchmarkingWrapper : public v8::Extension { 59 class GpuBenchmarkingWrapper : public v8::Extension {
25 public: 60 public:
26 GpuBenchmarkingWrapper() : 61 GpuBenchmarkingWrapper() :
27 v8::Extension(kGpuBenchmarkingExtensionName, 62 v8::Extension(kGpuBenchmarkingExtensionName,
28 "if (typeof(chrome) == 'undefined') {" 63 "if (typeof(chrome) == 'undefined') {"
29 " chrome = {};" 64 " chrome = {};"
30 "};" 65 "};"
31 "if (typeof(chrome.gpuBenchmarking) == 'undefined') {" 66 "if (typeof(chrome.gpuBenchmarking) == 'undefined') {"
32 " chrome.gpuBenchmarking = {};" 67 " chrome.gpuBenchmarking = {};"
33 "};" 68 "};"
34 "chrome.gpuBenchmarking.renderingStats = function() {" 69 "chrome.gpuBenchmarking.renderingStats = function() {"
35 " native function GetRenderingStats();" 70 " native function GetRenderingStats();"
36 " return GetRenderingStats();" 71 " return GetRenderingStats();"
37 "};" 72 "};"
38 "chrome.gpuBenchmarking.beginSmoothScrollDown = " 73 "chrome.gpuBenchmarking.beginSmoothScrollDown = "
39 " function(scroll_far) {" 74 " function(scroll_far) {"
40 " scroll_far = scroll_far || false;" 75 " scroll_far = scroll_far || false;"
41 " native function BeginSmoothScroll();" 76 " native function BeginSmoothScroll();"
42 " return BeginSmoothScroll(true, scroll_far);" 77 " return BeginSmoothScroll(true, scroll_far);"
43 "};" 78 "};"
44 "chrome.gpuBenchmarking.beginSmoothScrollUp = function(scroll_far) {" 79 "chrome.gpuBenchmarking.beginSmoothScrollUp = function(scroll_far) {"
45 " scroll_far = scroll_far || false;" 80 " scroll_far = scroll_far || false;"
46 " native function BeginSmoothScroll();" 81 " native function BeginSmoothScroll();"
47 " return BeginSmoothScroll(false, scroll_far);" 82 " return BeginSmoothScroll(false, scroll_far);"
83 "};"
84 "chrome.gpuBenchmarking.runRenderingBenchmarks = function(filter) {"
85 " native function RunRenderingBenchmarks();"
86 " return RunRenderingBenchmarks(filter);"
48 "};") {} 87 "};") {}
49 88
50 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 89 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
51 v8::Handle<v8::String> name) { 90 v8::Handle<v8::String> name) {
52 if (name->Equals(v8::String::New("GetRenderingStats"))) 91 if (name->Equals(v8::String::New("GetRenderingStats")))
53 return v8::FunctionTemplate::New(GetRenderingStats); 92 return v8::FunctionTemplate::New(GetRenderingStats);
54 if (name->Equals(v8::String::New("BeginSmoothScroll"))) 93 if (name->Equals(v8::String::New("BeginSmoothScroll")))
55 return v8::FunctionTemplate::New(BeginSmoothScroll); 94 return v8::FunctionTemplate::New(BeginSmoothScroll);
56 95 if (name->Equals(v8::String::New("RunRenderingBenchmarks")))
96 return v8::FunctionTemplate::New(RunRenderingBenchmarks);
57 return v8::Handle<v8::FunctionTemplate>(); 97 return v8::Handle<v8::FunctionTemplate>();
58 } 98 }
59 99
60 static v8::Handle<v8::Value> GetRenderingStats(const v8::Arguments& args) { 100 static v8::Handle<v8::Value> GetRenderingStats(const v8::Arguments& args) {
61 WebFrame* web_frame = WebFrame::frameForEnteredContext(); 101 WebFrame* web_frame = WebFrame::frameForEnteredContext();
62 if (!web_frame) 102 if (!web_frame)
63 return v8::Undefined(); 103 return v8::Undefined();
64 104
65 WebView* web_view = web_frame->view(); 105 WebView* web_view = web_frame->view();
66 if (!web_view) 106 if (!web_view)
(...skipping 29 matching lines...) Expand all
96 136
97 if (args.Length() != 2 || !args[0]->IsBoolean() || !args[1]->IsBoolean()) 137 if (args.Length() != 2 || !args[0]->IsBoolean() || !args[1]->IsBoolean())
98 return v8::False(); 138 return v8::False();
99 139
100 bool scroll_down = args[0]->BooleanValue(); 140 bool scroll_down = args[0]->BooleanValue();
101 bool scroll_far = args[1]->BooleanValue(); 141 bool scroll_far = args[1]->BooleanValue();
102 142
103 render_view_impl->BeginSmoothScroll(scroll_down, scroll_far); 143 render_view_impl->BeginSmoothScroll(scroll_down, scroll_far);
104 return v8::True(); 144 return v8::True();
105 } 145 }
146
147 static v8::Handle<v8::Value> RunRenderingBenchmarks(
148 const v8::Arguments& args) {
149 // for our name filter, the argument can be undefined or null to run
150 // all benchmarks, or a string for filtering by name
151 if (!args.Length() ||
152 (!args[0]->IsString() &&
153 !(args[0]->IsNull() || args[0]->IsUndefined())))
154 return v8::Undefined();
155
156 WebFrame* web_frame = WebFrame::frameForEnteredContext();
157 if (!web_frame)
158 return v8::Undefined();
159
160 WebView* web_view = web_frame->view();
161 if (!web_view)
162 return v8::Undefined();
163
164 v8::Handle<v8::Array> resultsArray = v8::Array::New(0);
165 V8BenchmarkResults results(resultsArray);
166 std::string nameFilter;
167 if (args[0]->IsNull() || args[0]->IsUndefined()) {
168 nameFilter = "";
169 } else {
170 char filter[256];
171 args[0]->ToString()->WriteAscii(filter, 0, sizeof(filter)-1);
172 nameFilter = std::string(filter);
173 }
174 WebViewBenchmarkSupport* support =
175 web_view->benchmarkSupport();
176 content::AllRenderingBenchmarks allBenchmarks(&results, nameFilter);
177 allBenchmarks.SetUp(support);
178 allBenchmarks.Run(support);
179 allBenchmarks.TearDown(support);
180 return resultsArray;
181 }
106 }; 182 };
107 183
108 v8::Extension* GpuBenchmarkingExtension::Get() { 184 v8::Extension* GpuBenchmarkingExtension::Get() {
109 return new GpuBenchmarkingWrapper(); 185 return new GpuBenchmarkingWrapper();
110 } 186 }
111 187
112 } // namespace content 188 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698