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

Unified Diff: chrome/browser/ui/webui/gpu_internals_ui.cc

Issue 7555005: Moving the contents of chrome://gpu Profiling to chrome://tracing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 4 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
« no previous file with comments | « chrome/browser/ui/webui/chrome_web_ui_factory.cc ('k') | chrome/browser/ui/webui/tracing_ui.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/gpu_internals_ui.cc
diff --git a/chrome/browser/ui/webui/gpu_internals_ui.cc b/chrome/browser/ui/webui/gpu_internals_ui.cc
index 8088c55ffbe313b4d3e6fd75333302d6c0cd93b5..93860ba5c6d1e106199badcdf97d8c83193666cd 100644
--- a/chrome/browser/ui/webui/gpu_internals_ui.cc
+++ b/chrome/browser/ui/webui/gpu_internals_ui.cc
@@ -4,49 +4,21 @@
#include "chrome/browser/ui/webui/gpu_internals_ui.h"
-#include <algorithm>
-#include <string>
-#include <utility>
-#include <vector>
-
#include "base/command_line.h"
-#include "base/file_util.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop.h"
-#include "base/path_service.h"
-#include "base/scoped_ptr.h"
-#include "base/stringprintf.h"
#include "base/string_number_conversions.h"
-#include "base/string_piece.h"
-#include "base/utf_string_conversions.h"
+#include "base/stringprintf.h"
#include "base/values.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/io_thread.h"
-#include "chrome/browser/net/chrome_net_log.h"
-#include "chrome/browser/net/connection_tester.h"
-#include "chrome/browser/net/passive_log_collector.h"
-#include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/shell_dialogs.h"
-#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h"
-#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_version_info.h"
-#include "chrome/common/jstemplate_builder.h"
#include "chrome/common/url_constants.h"
#include "content/browser/browser_thread.h"
#include "content/browser/gpu/gpu_data_manager.h"
-#include "content/browser/gpu/gpu_process_host.h"
-#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/tab_contents/tab_contents.h"
-#include "content/browser/tab_contents/tab_contents_view.h"
-#include "content/browser/trace_controller.h"
+#include "content/browser/webui/web_ui.h"
#include "grit/browser_resources.h"
#include "grit/generated_resources.h"
-#include "net/base/escape.h"
-#include "net/url_request/url_request_context_getter.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
namespace {
@@ -65,9 +37,7 @@ ChromeWebUIDataSource* CreateGpuHTMLSource() {
// this class's methods are expected to run on the UI thread.
class GpuMessageHandler
: public WebUIMessageHandler,
- public SelectFileDialog::Listener,
- public base::SupportsWeakPtr<GpuMessageHandler>,
- public TraceSubscriber {
+ public base::SupportsWeakPtr<GpuMessageHandler> {
public:
GpuMessageHandler();
virtual ~GpuMessageHandler();
@@ -77,33 +47,15 @@ class GpuMessageHandler
virtual void RegisterMessages() OVERRIDE;
// Messages
- void OnBeginTracing(const ListValue* list);
- void OnEndTracingAsync(const ListValue* list);
void OnBrowserBridgeInitialized(const ListValue* list);
void OnCallAsync(const ListValue* list);
- void OnBeginRequestBufferPercentFull(const ListValue* list);
- void OnLoadTraceFile(const ListValue* list);
- void OnSaveTraceFile(const ListValue* list);
// Submessages dispatched from OnCallAsync
Value* OnRequestClientInfo(const ListValue* list);
Value* OnRequestLogMessages(const ListValue* list);
- // SelectFileDialog::Listener implementation
- virtual void FileSelected(const FilePath& path,
- int index,
- void* params) OVERRIDE;
- virtual void FileSelectionCanceled(void* params) OVERRIDE;
-
// Callbacks.
void OnGpuInfoUpdate();
- void LoadTraceFileComplete(std::string* file_contents);
- void SaveTraceFileComplete();
-
- // TraceSubscriber implementation.
- virtual void OnEndTracingComplete() OVERRIDE;
- virtual void OnTraceDataCollected(const std::string& json_events) OVERRIDE;
- virtual void OnTraceBufferPercentFullReply(float percent_full) OVERRIDE;
// Executes the javascript function |function_name| in the renderer, passing
// it the argument |value|.
@@ -117,33 +69,6 @@ class GpuMessageHandler
GpuDataManager* gpu_data_manager_;
Callback0::Type* gpu_info_update_callback_;
-
- scoped_refptr<SelectFileDialog> select_trace_file_dialog_;
- SelectFileDialog::Type select_trace_file_dialog_type_;
- scoped_ptr<std::string> trace_data_to_save_;
-
- bool trace_enabled_;
-};
-
-class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> {
- public:
- explicit TaskProxy(const base::WeakPtr<GpuMessageHandler>& handler)
- : handler_(handler) {}
- void LoadTraceFileCompleteProxy(std::string* file_contents) {
- if (handler_)
- handler_->LoadTraceFileComplete(file_contents);
- delete file_contents;
- }
-
- void SaveTraceFileCompleteProxy() {
- if (handler_)
- handler_->SaveTraceFileComplete();
- }
-
- private:
- base::WeakPtr<GpuMessageHandler> handler_;
- friend class base::RefCountedThreadSafe<TaskProxy>;
- DISALLOW_COPY_AND_ASSIGN(TaskProxy);
};
////////////////////////////////////////////////////////////////////////////////
@@ -153,9 +78,7 @@ class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> {
////////////////////////////////////////////////////////////////////////////////
GpuMessageHandler::GpuMessageHandler()
- : gpu_info_update_callback_(NULL),
- select_trace_file_dialog_type_(SelectFileDialog::SELECT_NONE),
- trace_enabled_(false) {
+ : gpu_info_update_callback_(NULL) {
gpu_data_manager_ = GpuDataManager::GetInstance();
DCHECK(gpu_data_manager_);
}
@@ -165,12 +88,6 @@ GpuMessageHandler::~GpuMessageHandler() {
gpu_data_manager_->RemoveGpuInfoUpdateCallback(gpu_info_update_callback_);
delete gpu_info_update_callback_;
}
-
- if (select_trace_file_dialog_)
- select_trace_file_dialog_->ListenerDestroyed();
-
- // If we are the current subscriber, this will result in ending tracing.
- TraceController::GetInstance()->CancelSubscriber(this);
}
WebUIMessageHandler* GpuMessageHandler::Attach(WebUI* web_ui) {
@@ -184,26 +101,11 @@ void GpuMessageHandler::RegisterMessages() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
web_ui_->RegisterMessageCallback(
- "beginTracing",
- NewCallback(this, &GpuMessageHandler::OnBeginTracing));
- web_ui_->RegisterMessageCallback(
- "endTracingAsync",
- NewCallback(this, &GpuMessageHandler::OnEndTracingAsync));
- web_ui_->RegisterMessageCallback(
"browserBridgeInitialized",
NewCallback(this, &GpuMessageHandler::OnBrowserBridgeInitialized));
web_ui_->RegisterMessageCallback(
"callAsync",
NewCallback(this, &GpuMessageHandler::OnCallAsync));
- web_ui_->RegisterMessageCallback(
- "beginRequestBufferPercentFull",
- NewCallback(this, &GpuMessageHandler::OnBeginRequestBufferPercentFull));
- web_ui_->RegisterMessageCallback(
- "loadTraceFile",
- NewCallback(this, &GpuMessageHandler::OnLoadTraceFile));
- web_ui_->RegisterMessageCallback(
- "saveTraceFile",
- NewCallback(this, &GpuMessageHandler::OnSaveTraceFile));
}
void GpuMessageHandler::OnCallAsync(const ListValue* args) {
@@ -253,139 +155,6 @@ void GpuMessageHandler::OnCallAsync(const ListValue* args) {
}
}
-void GpuMessageHandler::OnBeginRequestBufferPercentFull(const ListValue* list) {
- TraceController::GetInstance()->GetTraceBufferPercentFullAsync(this);
-}
-
-class ReadTraceFileTask : public Task {
- public:
- ReadTraceFileTask(TaskProxy* proxy, const FilePath& path)
- : proxy_(proxy)
- , path_(path) {}
-
- virtual void Run() {
- std::string* file_contents = new std::string();
- if (!file_util::ReadFileToString(path_, file_contents)) {
- delete file_contents;
- return;
- }
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- NewRunnableMethod(proxy_.get(),
- &TaskProxy::LoadTraceFileCompleteProxy,
- file_contents));
- }
-
- private:
- scoped_refptr<TaskProxy> proxy_;
-
- // Path of the file to open.
- const FilePath path_;
-};
-
-class WriteTraceFileTask : public Task {
- public:
- WriteTraceFileTask(TaskProxy* proxy,
- const FilePath& path,
- std::string* contents)
- : proxy_(proxy)
- , path_(path)
- , contents_(contents) {}
-
- virtual void Run() {
- if (!file_util::WriteFile(path_, contents_->c_str(), contents_->size()))
- return;
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- NewRunnableMethod(proxy_.get(),
- &TaskProxy::SaveTraceFileCompleteProxy));
- }
-
- private:
- scoped_refptr<TaskProxy> proxy_;
-
- // Path of the file to save.
- const FilePath path_;
-
- // What to save
- scoped_ptr<std::string> contents_;
-};
-
-void GpuMessageHandler::FileSelected(
- const FilePath& path, int index, void* params) {
- if (select_trace_file_dialog_type_ == SelectFileDialog::SELECT_OPEN_FILE)
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- new ReadTraceFileTask(new TaskProxy(AsWeakPtr()), path));
- else
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- new WriteTraceFileTask(new TaskProxy(AsWeakPtr()), path,
- trace_data_to_save_.release()));
- select_trace_file_dialog_.release();
-}
-
-void GpuMessageHandler::FileSelectionCanceled(void* params) {
- select_trace_file_dialog_.release();
- if (select_trace_file_dialog_type_ == SelectFileDialog::SELECT_OPEN_FILE)
- web_ui_->CallJavascriptFunction("tracingController.onLoadTraceFileCanceled");
- else
- web_ui_->CallJavascriptFunction("tracingController.onSaveTraceFileCanceled");
-}
-
-void GpuMessageHandler::OnLoadTraceFile(const ListValue* list) {
- // Only allow a single dialog at a time.
- if (select_trace_file_dialog_.get())
- return;
- select_trace_file_dialog_type_ = SelectFileDialog::SELECT_OPEN_FILE;
- select_trace_file_dialog_ = SelectFileDialog::Create(this);
- select_trace_file_dialog_->SelectFile(
- SelectFileDialog::SELECT_OPEN_FILE,
- string16(),
- FilePath(),
- NULL, 0, FILE_PATH_LITERAL(""), web_ui_->tab_contents(),
- web_ui_->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
-}
-
-void GpuMessageHandler::LoadTraceFileComplete(std::string* file_contents) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- std::wstring javascript;
- javascript += L"tracingController.onLoadTraceFileComplete(";
- javascript += UTF8ToWide(*file_contents);
- javascript += L");";
-
- web_ui_->GetRenderViewHost()->ExecuteJavascriptInWebFrame(string16(),
- WideToUTF16Hack(javascript));
-}
-
-void GpuMessageHandler::OnSaveTraceFile(const ListValue* list) {
- // Only allow a single dialog at a time.
- if (select_trace_file_dialog_.get())
- return;
-
- DCHECK(list->GetSize() == 1);
-
- std::string* trace_data = new std::string();
- bool ok = list->GetString(0, trace_data);
- DCHECK(ok);
- trace_data_to_save_.reset(trace_data);
-
- select_trace_file_dialog_type_ = SelectFileDialog::SELECT_SAVEAS_FILE;
- select_trace_file_dialog_ = SelectFileDialog::Create(this);
- select_trace_file_dialog_->SelectFile(
- SelectFileDialog::SELECT_SAVEAS_FILE,
- string16(),
- FilePath(),
- NULL, 0, FILE_PATH_LITERAL(""), web_ui_->tab_contents(),
- web_ui_->tab_contents()->view()->GetTopLevelNativeWindow(), NULL);
-}
-
-void GpuMessageHandler::SaveTraceFileComplete() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- std::wstring javascript;
- web_ui_->CallJavascriptFunction("tracingController.onSaveTraceFileComplete");
-}
-
void GpuMessageHandler::OnBrowserBridgeInitialized(const ListValue* args) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -436,89 +205,6 @@ Value* GpuMessageHandler::OnRequestClientInfo(const ListValue* list) {
return dict;
}
-DictionaryValue* NewDescriptionValuePair(const std::string& desc,
- const std::string& value) {
- DictionaryValue* dict = new DictionaryValue();
- dict->SetString("description", desc);
- dict->SetString("value", value);
- return dict;
-}
-
-DictionaryValue* NewDescriptionValuePair(const std::string& desc,
- Value* value) {
- DictionaryValue* dict = new DictionaryValue();
- dict->SetString("description", desc);
- dict->Set("value", value);
- return dict;
-}
-
-#if defined(OS_WIN)
-// Output DxDiagNode tree as nested array of {description,value} pairs
-ListValue* DxDiagNodeToList(const DxDiagNode& node) {
- ListValue* list = new ListValue();
- for (std::map<std::string, std::string>::const_iterator it =
- node.values.begin();
- it != node.values.end();
- ++it) {
- list->Append(NewDescriptionValuePair(it->first, it->second));
- }
-
- for (std::map<std::string, DxDiagNode>::const_iterator it =
- node.children.begin();
- it != node.children.end();
- ++it) {
- ListValue* sublist = DxDiagNodeToList(it->second);
- list->Append(NewDescriptionValuePair(it->first, sublist));
- }
- return list;
-}
-
-#endif // OS_WIN
-
-DictionaryValue* GpuInfoToDict(const GPUInfo& gpu_info) {
- ListValue* basic_info = new ListValue();
- basic_info->Append(NewDescriptionValuePair("Initialization time",
- base::Int64ToString(gpu_info.initialization_time.InMilliseconds())));
- basic_info->Append(NewDescriptionValuePair("Vendor Id",
- base::StringPrintf("0x%04x", gpu_info.vendor_id)));
- basic_info->Append(NewDescriptionValuePair("Device Id",
- base::StringPrintf("0x%04x", gpu_info.device_id)));
- basic_info->Append(NewDescriptionValuePair("Driver vendor",
- gpu_info.driver_vendor));
- basic_info->Append(NewDescriptionValuePair("Driver version",
- gpu_info.driver_version));
- basic_info->Append(NewDescriptionValuePair("Driver date",
- gpu_info.driver_date));
- basic_info->Append(NewDescriptionValuePair("Pixel shader version",
- gpu_info.pixel_shader_version));
- basic_info->Append(NewDescriptionValuePair("Vertex shader version",
- gpu_info.vertex_shader_version));
- basic_info->Append(NewDescriptionValuePair("GL version",
- gpu_info.gl_version));
- basic_info->Append(NewDescriptionValuePair("GL_VENDOR",
- gpu_info.gl_vendor));
- basic_info->Append(NewDescriptionValuePair("GL_RENDERER",
- gpu_info.gl_renderer));
- basic_info->Append(NewDescriptionValuePair("GL_VERSION",
- gpu_info.gl_version_string));
- basic_info->Append(NewDescriptionValuePair("GL_EXTENSIONS",
- gpu_info.gl_extensions));
-
- DictionaryValue* info = new DictionaryValue();
- info->Set("basic_info", basic_info);
-
-#if defined(OS_WIN)
- Value* dx_info;
- if (gpu_info.dx_diagnostics.children.size())
- dx_info = DxDiagNodeToList(gpu_info.dx_diagnostics);
- else
- dx_info = Value::CreateNullValue();
- info->Set("diagnostics", dx_info);
-#endif
-
- return info;
-}
-
Value* GpuMessageHandler::OnRequestLogMessages(const ListValue*) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -526,10 +212,9 @@ Value* GpuMessageHandler::OnRequestLogMessages(const ListValue*) {
}
void GpuMessageHandler::OnGpuInfoUpdate() {
- const GPUInfo& gpu_info = gpu_data_manager_->gpu_info();
-
// Get GPU Info.
- DictionaryValue* gpu_info_val = GpuInfoToDict(gpu_info);
+ scoped_ptr<base::DictionaryValue> gpu_info_val(
+ gpu_data_manager_->GpuInfoAsDictionaryValue());
// Add in blacklisting features
Value* feature_status = gpu_data_manager_->GetFeatureStatus();
@@ -538,57 +223,7 @@ void GpuMessageHandler::OnGpuInfoUpdate() {
// Send GPU Info to javascript.
web_ui_->CallJavascriptFunction("browserBridge.onGpuInfoUpdate",
- *gpu_info_val);
-
- delete gpu_info_val;
-}
-
-void GpuMessageHandler::OnBeginTracing(const ListValue* args) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- trace_enabled_ = true;
- // TODO(jbates) This may fail, but that's OK for current use cases.
- // Ex: Multiple about:gpu traces can not trace simultaneously.
- // TODO(nduca) send feedback to javascript about whether or not BeginTracing
- // was successful.
- TraceController::GetInstance()->BeginTracing(this);
-}
-
-void GpuMessageHandler::OnEndTracingAsync(const ListValue* list) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- // TODO(nduca): fix javascript code to make sure trace_enabled_ is always true
- // here. triggered a false condition by just clicking stop
- // trace a few times when it was going slow, and maybe switching
- // between tabs.
- if (trace_enabled_ &&
- !TraceController::GetInstance()->EndTracingAsync(this)) {
- // Set to false now, since it turns out we never were the trace subscriber.
- OnEndTracingComplete();
- }
-}
-
-void GpuMessageHandler::OnEndTracingComplete() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- trace_enabled_ = false;
- web_ui_->CallJavascriptFunction("tracingController.onEndTracingComplete");
-}
-
-void GpuMessageHandler::OnTraceDataCollected(const std::string& json_events) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- std::wstring javascript;
- javascript += L"tracingController.onTraceDataCollected(";
- javascript += UTF8ToWide(json_events);
- javascript += L");";
-
- web_ui_->GetRenderViewHost()->ExecuteJavascriptInWebFrame(string16(),
- WideToUTF16Hack(javascript));
-}
-
-void GpuMessageHandler::OnTraceBufferPercentFullReply(float percent_full) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- web_ui_->CallJavascriptFunction(
- "tracingController.onRequestBufferPercentFullComplete",
- *scoped_ptr<Value>(Value::CreateDoubleValue(percent_full)));
+ *(gpu_info_val.get()));
}
} // namespace
« no previous file with comments | « chrome/browser/ui/webui/chrome_web_ui_factory.cc ('k') | chrome/browser/ui/webui/tracing_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698