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

Unified Diff: content/browser/gpu/gpu_internals_ui.cc

Issue 1375663002: Show GpuMemoryBuffer feature in chrome://gpu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cl formatted and removed "Formats"/"Native usage support" value pair Created 5 years, 2 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
Index: content/browser/gpu/gpu_internals_ui.cc
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index c30afe09621e4dde6d2c4af7da5ec1ec8ce58289..70779d81479e919e727d115df00cc7b55ecf9a45 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -19,6 +19,7 @@
#include "base/strings/stringprintf.h"
#include "base/sys_info.h"
#include "base/values.h"
+#include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/grit/content_resources.h"
@@ -232,6 +233,89 @@ base::DictionaryValue* GpuInfoAsDictionaryValue() {
return info;
}
+const char* BufferFormatToString(gfx::BufferFormat format) {
+ switch (format) {
+ case gfx::BufferFormat::ATC:
+ return "ATC";
+ case gfx::BufferFormat::ATCIA:
+ return "ATCIA";
+ case gfx::BufferFormat::DXT1:
+ return "DXT1";
+ case gfx::BufferFormat::DXT5:
+ return "DXT5";
+ case gfx::BufferFormat::ETC1:
+ return "ETC1";
+ case gfx::BufferFormat::R_8:
+ return "R_8";
+ case gfx::BufferFormat::RGBA_4444:
+ return "RGBA_4444";
+ case gfx::BufferFormat::RGBX_8888:
+ return "RGBX_8888";
+ case gfx::BufferFormat::RGBA_8888:
+ return "RGBA_8888";
+ case gfx::BufferFormat::BGRX_8888:
+ return "BGRX_8888";
+ case gfx::BufferFormat::BGRA_8888:
+ return "BGRA_8888";
+ case gfx::BufferFormat::YUV_420:
+ return "YUV_420";
+ case gfx::BufferFormat::YUV_420_BIPLANAR:
+ return "YUV_420_BIPLANAR";
+ case gfx::BufferFormat::UYVY_422:
+ return "UYVY_422";
+ }
+ NOTREACHED();
+ return nullptr;
+}
+
+const char* BufferUsageToString(gfx::BufferUsage usage) {
+ switch (usage) {
+ case gfx::BufferUsage::GPU_READ:
+ return "GPU_READ";
+ case gfx::BufferUsage::GPU_READ_WRITE:
+ return "GPU_READ_WRITE";
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE:
+ return "GPU_READ_CPU_READ_WRITE";
+ case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
+ return "GPU_READ_CPU_READ_WRITE_PERSISTENT";
+ }
+ NOTREACHED();
+ return nullptr;
+}
+
+base::DictionaryValue* GpuMemoryBufferInfoAsDictionaryValue() {
+ base::ListValue* gpu_memory_buffer_info = new base::ListValue();
+
+ BrowserGpuMemoryBufferManager* gpu_memory_buffer_manager =
+ BrowserGpuMemoryBufferManager::current();
+
+ for (size_t format = 0;
+ format < static_cast<size_t>(gfx::BufferFormat::LAST) + 1; format++) {
+ std::string native_usage_support;
+ for (size_t usage = 0;
+ usage < static_cast<size_t>(gfx::BufferUsage::LAST) + 1; usage++) {
+ if (gpu_memory_buffer_manager->IsNativeGpuMemoryBufferConfiguration(
+ static_cast<gfx::BufferFormat>(format),
+ static_cast<gfx::BufferUsage>(usage)))
+ native_usage_support = base::StringPrintf(
+ "%s%s %s", native_usage_support.c_str(),
+ native_usage_support.empty() ? "" : ",",
+ BufferUsageToString(static_cast<gfx::BufferUsage>(usage)));
+ }
+ if (native_usage_support.empty())
+ native_usage_support = base::StringPrintf("Software only");
+
+ gpu_memory_buffer_info->Append(NewDescriptionValuePair(
+ BufferFormatToString(static_cast<gfx::BufferFormat>(format)),
+ native_usage_support));
+ }
+
+ base::DictionaryValue* info = new base::DictionaryValue();
+ info->Set("gpu_memory_buffer_info", gpu_memory_buffer_info);
+
+ return info;
+}
+
// This class receives javascript messages from the renderer.
// Note that the WebUI infrastructure runs on the UI thread, therefore all of
// this class's methods are expected to run on the UI thread.
@@ -409,6 +493,14 @@ void GpuMessageHandler::OnGpuInfoUpdate() {
// Send GPU Info to javascript.
web_ui()->CallJavascriptFunction("browserBridge.onGpuInfoUpdate",
*(gpu_info_val.get()));
+
+ // Get GpuMemoryBuffer Info.
+ scoped_ptr<base::DictionaryValue> gpu_memory_buffer_info_val(
+ GpuMemoryBufferInfoAsDictionaryValue());
+
+ // Send GpuMemoryBuffer Info to javascript.
+ web_ui()->CallJavascriptFunction("browserBridge.onGpuMemoryBufferInfoUpdate",
+ *(gpu_memory_buffer_info_val.get()));
}
void GpuMessageHandler::OnGpuSwitched() {
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.cc ('k') | content/browser/resources/gpu/browser_bridge.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698