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