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