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

Side by Side Diff: content/renderer/gpu/gpu_benchmarking_extension.cc

Issue 11312069: Plumbing for rendering stats subscriber. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | content/renderer/render_widget.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 class GpuBenchmarkingWrapper : public v8::Extension { 88 class GpuBenchmarkingWrapper : public v8::Extension {
89 public: 89 public:
90 GpuBenchmarkingWrapper() : 90 GpuBenchmarkingWrapper() :
91 v8::Extension(kGpuBenchmarkingExtensionName, 91 v8::Extension(kGpuBenchmarkingExtensionName,
92 "if (typeof(chrome) == 'undefined') {" 92 "if (typeof(chrome) == 'undefined') {"
93 " chrome = {};" 93 " chrome = {};"
94 "};" 94 "};"
95 "if (typeof(chrome.gpuBenchmarking) == 'undefined') {" 95 "if (typeof(chrome.gpuBenchmarking) == 'undefined') {"
96 " chrome.gpuBenchmarking = {};" 96 " chrome.gpuBenchmarking = {};"
97 "};" 97 "};"
98 "chrome.gpuBenchmarking.startRecordingRenderingStats = function() {"
99 " native function StartRecordingRenderingStats();"
100 " StartRecordingRenderingStats();"
101 "};"
102 "chrome.gpuBenchmarking.stopRecordingRenderingStats = function() {"
103 " native function GetRenderingStats();"
104 " return GetRenderingStats(true);"
105 "};"
98 "chrome.gpuBenchmarking.renderingStats = function() {" 106 "chrome.gpuBenchmarking.renderingStats = function() {"
99 " native function GetRenderingStats();" 107 " native function GetRenderingStats();"
100 " return GetRenderingStats();" 108 " return GetRenderingStats(false);"
101 "};" 109 "};"
102 "chrome.gpuBenchmarking.printToSkPicture = function(dirname) {" 110 "chrome.gpuBenchmarking.printToSkPicture = function(dirname) {"
103 " native function PrintToSkPicture();" 111 " native function PrintToSkPicture();"
104 " return PrintToSkPicture(dirname);" 112 " return PrintToSkPicture(dirname);"
105 "};" 113 "};"
106 "chrome.gpuBenchmarking.smoothScrollBy = " 114 "chrome.gpuBenchmarking.smoothScrollBy = "
107 " function(pixels_to_scroll, opt_callback, opt_mouse_event_x," 115 " function(pixels_to_scroll, opt_callback, opt_mouse_event_x,"
108 " opt_mouse_event_y) {" 116 " opt_mouse_event_y) {"
109 " pixels_to_scroll = pixels_to_scroll || 0;" 117 " pixels_to_scroll = pixels_to_scroll || 0;"
110 " callback = opt_callback || function() { };" 118 " callback = opt_callback || function() { };"
111 " native function BeginSmoothScroll();" 119 " native function BeginSmoothScroll();"
112 " if (typeof opt_mouse_event_x !== 'undefined' &&" 120 " if (typeof opt_mouse_event_x !== 'undefined' &&"
113 " typeof opt_mouse_event_y !== 'undefined') {" 121 " typeof opt_mouse_event_y !== 'undefined') {"
114 " return BeginSmoothScroll(pixels_to_scroll >= 0, callback," 122 " return BeginSmoothScroll(pixels_to_scroll >= 0, callback,"
115 " Math.abs(pixels_to_scroll)," 123 " Math.abs(pixels_to_scroll),"
116 " opt_mouse_event_x, opt_mouse_event_y);" 124 " opt_mouse_event_x, opt_mouse_event_y);"
117 " } else {" 125 " } else {"
118 " return BeginSmoothScroll(pixels_to_scroll >= 0, callback," 126 " return BeginSmoothScroll(pixels_to_scroll >= 0, callback,"
119 " Math.abs(pixels_to_scroll));" 127 " Math.abs(pixels_to_scroll));"
120 " }" 128 " }"
121 "};" 129 "};"
122 "chrome.gpuBenchmarking.runRenderingBenchmarks = function(filter) {" 130 "chrome.gpuBenchmarking.runRenderingBenchmarks = function(filter) {"
123 " native function RunRenderingBenchmarks();" 131 " native function RunRenderingBenchmarks();"
124 " return RunRenderingBenchmarks(filter);" 132 " return RunRenderingBenchmarks(filter);"
125 "};") {} 133 "};") {}
126 134
127 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 135 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
128 v8::Handle<v8::String> name) { 136 v8::Handle<v8::String> name) {
137 if (name->Equals(v8::String::New("StartRecordingRenderingStats")))
138 return v8::FunctionTemplate::New(StartRecordingRenderingStats);
129 if (name->Equals(v8::String::New("GetRenderingStats"))) 139 if (name->Equals(v8::String::New("GetRenderingStats")))
130 return v8::FunctionTemplate::New(GetRenderingStats); 140 return v8::FunctionTemplate::New(GetRenderingStats);
131 if (name->Equals(v8::String::New("PrintToSkPicture"))) 141 if (name->Equals(v8::String::New("PrintToSkPicture")))
132 return v8::FunctionTemplate::New(PrintToSkPicture); 142 return v8::FunctionTemplate::New(PrintToSkPicture);
133 if (name->Equals(v8::String::New("BeginSmoothScroll"))) 143 if (name->Equals(v8::String::New("BeginSmoothScroll")))
134 return v8::FunctionTemplate::New(BeginSmoothScroll); 144 return v8::FunctionTemplate::New(BeginSmoothScroll);
135 if (name->Equals(v8::String::New("RunRenderingBenchmarks"))) 145 if (name->Equals(v8::String::New("RunRenderingBenchmarks")))
136 return v8::FunctionTemplate::New(RunRenderingBenchmarks); 146 return v8::FunctionTemplate::New(RunRenderingBenchmarks);
137 147
138 return v8::Handle<v8::FunctionTemplate>(); 148 return v8::Handle<v8::FunctionTemplate>();
139 } 149 }
140 150
151 static v8::Handle<v8::Value> StartRecordingRenderingStats(
152 const v8::Arguments& args) {
153 WebFrame* web_frame = WebFrame::frameForCurrentContext();
154 if (!web_frame)
155 return v8::Undefined();
156
157 WebView* web_view = web_frame->view();
158 if (!web_view)
159 return v8::Undefined();
160
161 RenderViewImpl* render_view_impl = RenderViewImpl::FromWebView(web_view);
162 if (!render_view_impl)
163 return v8::Undefined();
164
165 render_view_impl->StartRecordingRenderingStats();
166 return v8::Undefined();
167 }
168
141 static v8::Handle<v8::Value> GetRenderingStats(const v8::Arguments& args) { 169 static v8::Handle<v8::Value> GetRenderingStats(const v8::Arguments& args) {
142 170
171 if (args.Length() != 1 ||
172 !args[0]->IsBoolean())
apatrick_chromium 2012/11/05 20:33:18 nit: this condition expression would fit on one li
173 return v8::Undefined();
174
175 bool use_rendering_stats_subscriber = args[0]->BooleanValue();
176
143 WebFrame* web_frame = WebFrame::frameForCurrentContext(); 177 WebFrame* web_frame = WebFrame::frameForCurrentContext();
144 if (!web_frame) 178 if (!web_frame)
145 return v8::Undefined(); 179 return v8::Undefined();
146 180
147 WebView* web_view = web_frame->view(); 181 WebView* web_view = web_frame->view();
148 if (!web_view) 182 if (!web_view)
149 return v8::Undefined(); 183 return v8::Undefined();
150 184
151 RenderViewImpl* render_view_impl = RenderViewImpl::FromWebView(web_view); 185 RenderViewImpl* render_view_impl = RenderViewImpl::FromWebView(web_view);
152 if (!render_view_impl) 186 if (!render_view_impl)
153 return v8::Undefined(); 187 return v8::Undefined();
154 188
155 WebRenderingStats stats; 189 WebRenderingStats stats;
156 render_view_impl->GetRenderingStats(stats); 190 if (use_rendering_stats_subscriber)
191 render_view_impl->StopRecordingRenderingStats(stats);
192 else
193 render_view_impl->GetRenderingStats(stats);
157 194
158 content::GpuRenderingStats gpu_stats; 195 content::GpuRenderingStats gpu_stats;
159 render_view_impl->GetGpuRenderingStats(&gpu_stats); 196 render_view_impl->GetGpuRenderingStats(&gpu_stats);
160 v8::Handle<v8::Object> stats_object = v8::Object::New(); 197 v8::Handle<v8::Object> stats_object = v8::Object::New();
161 stats_object->Set(v8::String::New("numAnimationFrames"), 198 stats_object->Set(v8::String::New("numAnimationFrames"),
162 v8::Integer::New(stats.numAnimationFrames)); 199 v8::Integer::New(stats.numAnimationFrames));
163 stats_object->Set(v8::String::New("numFramesSentToScreen"), 200 stats_object->Set(v8::String::New("numFramesSentToScreen"),
164 v8::Integer::New(stats.numFramesSentToScreen)); 201 v8::Integer::New(stats.numFramesSentToScreen));
165 stats_object->Set(v8::String::New("droppedFrameCount"), 202 stats_object->Set(v8::String::New("droppedFrameCount"),
166 v8::Integer::New(stats.droppedFrameCount)); 203 v8::Integer::New(stats.droppedFrameCount));
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 405
369 return results; 406 return results;
370 } 407 }
371 }; 408 };
372 409
373 v8::Extension* GpuBenchmarkingExtension::Get() { 410 v8::Extension* GpuBenchmarkingExtension::Get() {
374 return new GpuBenchmarkingWrapper(); 411 return new GpuBenchmarkingWrapper();
375 } 412 }
376 413
377 } // namespace content 414 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/render_widget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698