Chromium Code Reviews| Index: chrome/renderer/benchmarking_extension.cc |
| diff --git a/chrome/renderer/benchmarking_extension.cc b/chrome/renderer/benchmarking_extension.cc |
| index d6eb831fad1647a1ebcf4b090a32cde3b1bc4c54..b190a11e140014441a88994ac2db6bd834b13a4f 100644 |
| --- a/chrome/renderer/benchmarking_extension.cc |
| +++ b/chrome/renderer/benchmarking_extension.cc |
| @@ -10,10 +10,16 @@ |
| #include "chrome/common/benchmarking_messages.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/renderer/render_thread.h" |
| +#include "content/public/renderer/render_view.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h" |
| #include "v8/include/v8.h" |
| using WebKit::WebCache; |
| +using WebKit::WebFrame; |
| +using WebKit::WebView; |
| +using WebKit::WebRenderingStats; |
| const char kBenchmarkingExtensionName[] = "v8/Benchmarking"; |
| @@ -57,6 +63,10 @@ class BenchmarkingWrapper : public v8::Extension { |
| " native function IsSingleProcess();" |
| " return IsSingleProcess();" |
| "};" |
| + "chrome.benchmarking.renderingStats = function() {" |
| + " native function RenderingStats();" |
|
nduca
2012/06/15 00:26:22
We want to move these changes to gpu_benchmarking_
dtu
2012/06/20 00:57:32
Done.
|
| + " return RenderingStats();" |
| + "};" |
| "chrome.Interval = function() {" |
| " var start_ = 0;" |
| " var stop_ = 0;" |
| @@ -95,6 +105,8 @@ class BenchmarkingWrapper : public v8::Extension { |
| return v8::FunctionTemplate::New(GetCounter); |
| } else if (name->Equals(v8::String::New("IsSingleProcess"))) { |
| return v8::FunctionTemplate::New(IsSingleProcess); |
| + } else if (name->Equals(v8::String::New("RenderingStats"))) { |
| + return v8::FunctionTemplate::New(RenderingStats); |
| } else if (name->Equals(v8::String::New("HiResTime"))) { |
| return v8::FunctionTemplate::New(HiResTime); |
| } |
| @@ -163,6 +175,33 @@ class BenchmarkingWrapper : public v8::Extension { |
| CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)); |
| } |
| + static v8::Handle<v8::Value> RenderingStats(const v8::Arguments& args) { |
| + WebFrame* web_frame = WebFrame::frameForEnteredContext(); |
| + if (!web_frame) |
| + return v8::Undefined(); |
| + |
| + WebView* web_view = web_frame->view(); |
| + if (!web_view) |
| + return v8::Undefined(); |
| + |
| + content::RenderView* render_view = |
| + content::RenderView::FromWebView(web_view); |
| + if (!render_view) |
| + return v8::Undefined(); |
| + |
| + WebRenderingStats stats; |
| + render_view->GetRenderingStats(stats); |
| + |
|
nduca
2012/06/15 00:26:22
/me wonders if there's a way to get the fields of
|
| + v8::Handle<v8::Object> stats_object = v8::Object::New(); |
| + if (stats.frameNumber) |
| + stats_object->Set(v8::String::New("frameNumber"), |
| + v8::Integer::New(stats.frameNumber), v8::ReadOnly); |
| + if (stats.implFrameNumber) |
| + stats_object->Set(v8::String::New("implFrameNumber"), |
| + v8::Integer::New(stats.implFrameNumber), v8::ReadOnly); |
| + return stats_object; |
| + } |
| + |
| static v8::Handle<v8::Value> HiResTime(const v8::Arguments& args) { |
| return v8::Number::New( |
| static_cast<double>(base::TimeTicks::HighResNow().ToInternalValue())); |