summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-10 22:54:43 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-10 22:54:43 +0000
commitd6d8f719ce2e6c1483e085523ddb963eba1b6514 (patch)
tree368bb1396420155025fe41e5f13b5b7468b574f9 /content
parent9fefe44a6503d060cd7cc38df910f09b3164c5e0 (diff)
downloadchromium_src-d6d8f719ce2e6c1483e085523ddb963eba1b6514.zip
chromium_src-d6d8f719ce2e6c1483e085523ddb963eba1b6514.tar.gz
chromium_src-d6d8f719ce2e6c1483e085523ddb963eba1b6514.tar.bz2
Move GPU messages to content. I've also switched the IPC structs to use the new IPC macros that generate serialization code.
Review URL: http://codereview.chromium.org/6673003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77721 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/DEPS1
-rw-r--r--content/browser/gpu_blacklist.cc2
-rw-r--r--content/browser/gpu_blacklist_unittest.cc2
-rw-r--r--content/browser/gpu_process_host.cc2
-rw-r--r--content/browser/renderer_host/gpu_message_filter.cc9
-rw-r--r--content/common/common_param_traits.cc66
-rw-r--r--content/common/common_param_traits.h63
-rw-r--r--content/common/content_message_generator.h1
-rw-r--r--content/common/dx_diag_node.cc9
-rw-r--r--content/common/dx_diag_node.h22
-rw-r--r--content/common/gpu_info.cc26
-rw-r--r--content/common/gpu_info.h100
-rw-r--r--content/common/gpu_info_unittest.cc26
-rw-r--r--content/common/gpu_messages.h477
-rw-r--r--content/content_common.gypi5
15 files changed, 802 insertions, 9 deletions
diff --git a/content/DEPS b/content/DEPS
index b5cb1c7..a5184fb 100644
--- a/content/DEPS
+++ b/content/DEPS
@@ -9,6 +9,7 @@ include_rules = [
"+chrome",
"+grit",
+ "+gpu",
"+media",
"+net",
"+ppapi",
diff --git a/content/browser/gpu_blacklist.cc b/content/browser/gpu_blacklist.cc
index ce54c28..9130149 100644
--- a/content/browser/gpu_blacklist.cc
+++ b/content/browser/gpu_blacklist.cc
@@ -14,7 +14,7 @@
#include "base/sys_info.h"
#include "base/values.h"
#include "base/version.h"
-#include "chrome/common/gpu_info.h"
+#include "content/common/gpu_info.h"
namespace {
diff --git a/content/browser/gpu_blacklist_unittest.cc b/content/browser/gpu_blacklist_unittest.cc
index 6008b62..0394a06 100644
--- a/content/browser/gpu_blacklist_unittest.cc
+++ b/content/browser/gpu_blacklist_unittest.cc
@@ -10,8 +10,8 @@
#include "base/path_service.h"
#include "base/scoped_ptr.h"
#include "base/version.h"
-#include "chrome/common/gpu_info.h"
#include "content/browser/gpu_blacklist.h"
+#include "content/common/gpu_info.h"
#include "testing/gtest/include/gtest/gtest.h"
class GpuBlacklistTest : public testing::Test {
diff --git a/content/browser/gpu_process_host.cc b/content/browser/gpu_process_host.cc
index e89a46e..900abff 100644
--- a/content/browser/gpu_process_host.cc
+++ b/content/browser/gpu_process_host.cc
@@ -17,12 +17,12 @@
#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/gpu_feature_flags.h"
-#include "chrome/common/gpu_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/gpu/gpu_thread.h"
#include "content/browser/browser_thread.h"
#include "content/browser/renderer_host/render_widget_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
+#include "content/common/gpu_messages.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_switches.h"
#include "media/base/media_switches.h"
diff --git a/content/browser/renderer_host/gpu_message_filter.cc b/content/browser/renderer_host/gpu_message_filter.cc
index 9222e10..87d2362 100644
--- a/content/browser/renderer_host/gpu_message_filter.cc
+++ b/content/browser/renderer_host/gpu_message_filter.cc
@@ -10,10 +10,9 @@
#include "base/callback.h"
#include "chrome/browser/gpu_process_host_ui_shim.h"
-#include "chrome/common/gpu_create_command_buffer_config.h"
-#include "chrome/common/gpu_messages.h"
#include "chrome/common/render_messages.h"
#include "content/browser/gpu_process_host.h"
+#include "content/common/gpu_messages.h"
GpuMessageFilter::GpuMessageFilter(int render_process_id)
: gpu_host_id_(0),
@@ -92,10 +91,8 @@ class EstablishChannelCallback
#endif
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- ViewMsg_GpuChannelEstablished* reply =
- new ViewMsg_GpuChannelEstablished(channel,
- renderer_process_for_gpu,
- gpu_info);
+ IPC::Message* reply = new GpuMsg_GpuChannelEstablished(
+ channel, renderer_process_for_gpu, gpu_info);
// If the renderer process is performing synchronous initialization,
// it needs to handle this message before receiving the reply for
diff --git a/content/common/common_param_traits.cc b/content/common/common_param_traits.cc
index b5ba062..948576b 100644
--- a/content/common/common_param_traits.cc
+++ b/content/common/common_param_traits.cc
@@ -8,6 +8,7 @@
#include "net/base/host_port_pair.h"
#include "net/base/upload_data.h"
#include "net/http/http_response_headers.h"
+#include "ui/gfx/rect.h"
#include "webkit/glue/resource_loader_bridge.h"
namespace IPC {
@@ -470,4 +471,69 @@ void ParamTraits<base::PlatformFileInfo>::Log(
l->append(")");
}
+void ParamTraits<gfx::Point>::Write(Message* m, const gfx::Point& p) {
+ m->WriteInt(p.x());
+ m->WriteInt(p.y());
+}
+
+bool ParamTraits<gfx::Point>::Read(const Message* m, void** iter,
+ gfx::Point* r) {
+ int x, y;
+ if (!m->ReadInt(iter, &x) ||
+ !m->ReadInt(iter, &y))
+ return false;
+ r->set_x(x);
+ r->set_y(y);
+ return true;
+}
+
+void ParamTraits<gfx::Point>::Log(const gfx::Point& p, std::string* l) {
+ l->append(base::StringPrintf("(%d, %d)", p.x(), p.y()));
+}
+
+void ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) {
+ m->WriteInt(p.width());
+ m->WriteInt(p.height());
+}
+
+bool ParamTraits<gfx::Size>::Read(const Message* m, void** iter, gfx::Size* r) {
+ int w, h;
+ if (!m->ReadInt(iter, &w) ||
+ !m->ReadInt(iter, &h))
+ return false;
+ r->set_width(w);
+ r->set_height(h);
+ return true;
+}
+
+void ParamTraits<gfx::Size>::Log(const gfx::Size& p, std::string* l) {
+ l->append(base::StringPrintf("(%d, %d)", p.width(), p.height()));
+}
+
+void ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) {
+ m->WriteInt(p.x());
+ m->WriteInt(p.y());
+ m->WriteInt(p.width());
+ m->WriteInt(p.height());
+}
+
+bool ParamTraits<gfx::Rect>::Read(const Message* m, void** iter, gfx::Rect* r) {
+ int x, y, w, h;
+ if (!m->ReadInt(iter, &x) ||
+ !m->ReadInt(iter, &y) ||
+ !m->ReadInt(iter, &w) ||
+ !m->ReadInt(iter, &h))
+ return false;
+ r->set_x(x);
+ r->set_y(y);
+ r->set_width(w);
+ r->set_height(h);
+ return true;
+}
+
+void ParamTraits<gfx::Rect>::Log(const gfx::Rect& p, std::string* l) {
+ l->append(base::StringPrintf("(%d, %d, %d, %d)", p.x(), p.y(),
+ p.width(), p.height()));
+}
+
} // namespace IPC
diff --git a/content/common/common_param_traits.h b/content/common/common_param_traits.h
index f6f79b6..20c5be3 100644
--- a/content/common/common_param_traits.h
+++ b/content/common/common_param_traits.h
@@ -27,11 +27,18 @@
// TODO(erg): The following headers are historical and only work because
// their definitions are inlined, which also needs to be fixed.
+#include "ui/gfx/native_widget_types.h"
#include "webkit/glue/resource_type.h"
// Forward declarations.
class GURL;
+namespace gfx {
+class Point;
+class Rect;
+class Size;
+} // namespace gfx
+
namespace net {
class HttpResponseHeaders;
class HostPortPair;
@@ -122,6 +129,62 @@ struct SimilarTypeTraits<base::PlatformFileError> {
typedef int Type;
};
+template <>
+struct ParamTraits<gfx::Point> {
+ typedef gfx::Point param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template <>
+struct ParamTraits<gfx::Size> {
+ typedef gfx::Size param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template <>
+struct ParamTraits<gfx::Rect> {
+ typedef gfx::Rect param_type;
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::string* l);
+};
+
+template <>
+struct ParamTraits<gfx::NativeWindow> {
+ typedef gfx::NativeWindow param_type;
+ static void Write(Message* m, const param_type& p) {
+#if defined(OS_WIN)
+ // HWNDs are always 32 bits on Windows, even on 64 bit systems.
+ m->WriteUInt32(reinterpret_cast<uint32>(p));
+#else
+ m->WriteData(reinterpret_cast<const char*>(&p), sizeof(p));
+#endif
+ }
+ static bool Read(const Message* m, void** iter, param_type* r) {
+#if defined(OS_WIN)
+ return m->ReadUInt32(iter, reinterpret_cast<uint32*>(r));
+#else
+ const char *data;
+ int data_size = 0;
+ bool result = m->ReadData(iter, &data, &data_size);
+ if (result && data_size == sizeof(gfx::NativeWindow)) {
+ memcpy(r, data, sizeof(gfx::NativeWindow));
+ } else {
+ result = false;
+ NOTREACHED();
+ }
+ return result;
+#endif
+ }
+ static void Log(const param_type& p, std::string* l) {
+ l->append("<gfx::NativeWindow>");
+ }
+};
+
} // namespace IPC
#endif // CONTENT_COMMON_COMMON_PARAM_TRAITS_H_
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h
index 619e26c..69d16bc8 100644
--- a/content/common/content_message_generator.h
+++ b/content/common/content_message_generator.h
@@ -7,5 +7,6 @@
#include "content/common/child_process_messages.h"
#include "content/common/file_system_messages.h"
#include "content/common/p2p_messages.h"
+#include "content/common/gpu_messages.h"
#include "content/common/resource_messages.h"
#include "content/common/socket_stream_messages.h"
diff --git a/content/common/dx_diag_node.cc b/content/common/dx_diag_node.cc
new file mode 100644
index 0000000..566cd4a
--- /dev/null
+++ b/content/common/dx_diag_node.cc
@@ -0,0 +1,9 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/dx_diag_node.h"
+
+DxDiagNode::DxDiagNode() {}
+
+DxDiagNode::~DxDiagNode() {}
diff --git a/content/common/dx_diag_node.h b/content/common/dx_diag_node.h
new file mode 100644
index 0000000..8e3f2e3
--- /dev/null
+++ b/content/common/dx_diag_node.h
@@ -0,0 +1,22 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// A tree of name value pairs that report contain DirectX diagnostic
+// information.
+
+#ifndef CONTENT_COMMON_DX_DIAG_NODE_H_
+#define CONTENT_COMMON_DX_DIAG_NODE_H_
+
+#include <map>
+#include <string>
+
+struct DxDiagNode {
+ DxDiagNode();
+ ~DxDiagNode();
+
+ std::map<std::string, std::string> values;
+ std::map<std::string, DxDiagNode> children;
+};
+
+#endif // CONTENT_COMMON_DX_DIAG_NODE_H_
diff --git a/content/common/gpu_info.cc b/content/common/gpu_info.cc
new file mode 100644
index 0000000..55ecdbc
--- /dev/null
+++ b/content/common/gpu_info.cc
@@ -0,0 +1,26 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/gpu_info.h"
+
+GPUInfo::GPUInfo()
+ : level(kUninitialized),
+ vendor_id(0),
+ device_id(0),
+ driver_vendor(""),
+ driver_version(""),
+ driver_date(""),
+ pixel_shader_version(0),
+ vertex_shader_version(0),
+ gl_version(0),
+ gl_version_string(""),
+ gl_vendor(""),
+ gl_renderer(""),
+ gl_extensions(""),
+ can_lose_context(false),
+ collection_error(false) {
+}
+
+GPUInfo::~GPUInfo() {
+}
diff --git a/content/common/gpu_info.h b/content/common/gpu_info.h
new file mode 100644
index 0000000..b571682
--- /dev/null
+++ b/content/common/gpu_info.h
@@ -0,0 +1,100 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_COMMON_GPU_INFO_H_
+#define CONTENT_COMMON_GPU_INFO_H_
+#pragma once
+
+// Provides access to the GPU information for the system
+// on which chrome is currently running.
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/time.h"
+#include "build/build_config.h"
+#include "content/common/dx_diag_node.h"
+
+struct GPUInfo {
+ GPUInfo();
+ ~GPUInfo();
+
+ enum Level {
+ kUninitialized,
+ kPreliminary,
+ kPartial,
+ kCompleting,
+ kComplete,
+ };
+
+ // Whether this GPUInfo has been partially or fully initialized with
+ // information.
+ Level level;
+
+ // The amount of time taken to get from the process starting to the message
+ // loop being pumped.
+ base::TimeDelta initialization_time;
+
+ // The DWORD (uint32) representing the graphics card vendor id.
+ uint32 vendor_id;
+
+ // The DWORD (uint32) representing the graphics card device id. Device ids
+ // are unique to vendor, not to one another.
+ uint32 device_id;
+
+ // The vendor of the graphics driver currently installed.
+ std::string driver_vendor;
+
+ // The version of the graphics driver currently installed.
+ std::string driver_version;
+
+ // The date of the graphics driver currently installed.
+ std::string driver_date;
+
+ // The version of the pixel/fragment shader used by the gpu. Major version in
+ // the second lowest 8 bits, minor in the lowest 8 bits, eg version 2.5 would
+ // be 0x00000205.
+ uint32 pixel_shader_version;
+
+ // The version of the vertex shader used by the gpu. Major version in the
+ // second lowest 8 bits, minor in the lowest 8 bits, eg version 2.5 would be
+ // 0x00000205.
+ uint32 vertex_shader_version;
+
+ // The version of OpenGL we are using.
+ // Major version in the second lowest 8 bits, minor in the lowest 8 bits,
+ // eg version 2.5 would be 0x00000205.
+ // Returns 0 if we're not using OpenGL, say because we're going through
+ // D3D instead.
+ // TODO(zmo): should be able to tell if it's GL or GLES.
+ uint32 gl_version;
+
+ // The GL_VERSION string. "" if we are not using OpenGL.
+ std::string gl_version_string;
+
+ // The GL_VENDOR string. "" if we are not using OpenGL.
+ std::string gl_vendor;
+
+ // The GL_RENDERER string. "" if we are not using OpenGL.
+ std::string gl_renderer;
+
+ // The GL_EXTENSIONS string. "" if we are not using OpenGL.
+ std::string gl_extensions;
+
+ // The device semantics, i.e. whether the Vista and Windows 7 specific
+ // semantics are available.
+ bool can_lose_context;
+
+ // True if there was an error at any stage of collecting GPUInfo data.
+ // If there was an error, then the GPUInfo fields may be incomplete or set
+ // to default values such as 0 or empty string.
+ bool collection_error;
+
+#if defined(OS_WIN)
+ // The information returned by the DirectX Diagnostics Tool.
+ DxDiagNode dx_diagnostics;
+#endif
+};
+
+#endif // CONTENT_COMMON_GPU_INFO_H_
diff --git a/content/common/gpu_info_unittest.cc b/content/common/gpu_info_unittest.cc
new file mode 100644
index 0000000..8e99e37
--- /dev/null
+++ b/content/common/gpu_info_unittest.cc
@@ -0,0 +1,26 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/gpu_info.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Test that an empty GPUInfo has valid members
+TEST(GPUInfoBasicTest, EmptyGPUInfo) {
+ GPUInfo gpu_info;
+ EXPECT_EQ(gpu_info.level, GPUInfo::kUninitialized);
+ EXPECT_EQ(gpu_info.initialization_time.ToInternalValue(), 0);
+ EXPECT_EQ(gpu_info.vendor_id, 0u);
+ EXPECT_EQ(gpu_info.device_id, 0u);
+ EXPECT_EQ(gpu_info.driver_vendor, "");
+ EXPECT_EQ(gpu_info.driver_version, "");
+ EXPECT_EQ(gpu_info.driver_date, "");
+ EXPECT_EQ(gpu_info.pixel_shader_version, 0u);
+ EXPECT_EQ(gpu_info.vertex_shader_version, 0u);
+ EXPECT_EQ(gpu_info.gl_version, 0u);
+ EXPECT_EQ(gpu_info.gl_version_string, "");
+ EXPECT_EQ(gpu_info.gl_vendor, "");
+ EXPECT_EQ(gpu_info.gl_renderer, "");
+ EXPECT_EQ(gpu_info.gl_extensions, "");
+ EXPECT_EQ(gpu_info.can_lose_context, false);
+}
diff --git a/content/common/gpu_messages.h b/content/common/gpu_messages.h
new file mode 100644
index 0000000..558f6b3
--- /dev/null
+++ b/content/common/gpu_messages.h
@@ -0,0 +1,477 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <vector>
+#include <string>
+
+#include "base/shared_memory.h"
+#include "content/common/common_param_traits.h"
+#include "content/common/gpu_info.h"
+#include "gpu/ipc/gpu_command_buffer_traits.h"
+#include "gpu/command_buffer/common/command_buffer.h"
+#include "ipc/ipc_channel_handle.h"
+#include "ipc/ipc_message_macros.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/gfx/size.h"
+
+// Multiply-included message file, hence no include guard.
+
+#define IPC_MESSAGE_START GpuMsgStart
+
+// Flag assigned to a video buffer for both input and output.
+#define kGpuVideoEndOfStream (1 << 0)
+
+IPC_STRUCT_BEGIN(GPUCreateCommandBufferConfig)
+ IPC_STRUCT_MEMBER(std::string, allowed_extensions)
+ IPC_STRUCT_MEMBER(std::vector<int>, attribs)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(GpuVideoDecoderInitParam)
+ IPC_STRUCT_MEMBER(int32, codec_id)
+ IPC_STRUCT_MEMBER(int32, width)
+ IPC_STRUCT_MEMBER(int32, height)
+ IPC_STRUCT_MEMBER(int32, profile)
+ IPC_STRUCT_MEMBER(int32, level)
+ IPC_STRUCT_MEMBER(int32, frame_rate_den)
+ IPC_STRUCT_MEMBER(int32, frame_rate_num)
+ IPC_STRUCT_MEMBER(int32, aspect_ratio_den)
+ IPC_STRUCT_MEMBER(int32, aspect_ratio_num)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(GpuVideoDecoderInitDoneParam)
+ // other parameter is only meaningful when this is true.
+ IPC_STRUCT_MEMBER(int32, success)
+ IPC_STRUCT_MEMBER(int32, input_buffer_size)
+ IPC_STRUCT_MEMBER(base::SharedMemoryHandle, input_buffer_handle)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(GpuVideoDecoderInputBufferParam)
+ IPC_STRUCT_MEMBER(int64, timestamp) // In unit of microseconds.
+ IPC_STRUCT_MEMBER(int32, offset)
+ IPC_STRUCT_MEMBER(int32, size)
+ IPC_STRUCT_MEMBER(int32, flags) // Miscellaneous flag bit mask.
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(GpuVideoDecoderErrorInfoParam)
+ IPC_STRUCT_MEMBER(int32, error_id) // TODO(jiesun): define enum.
+IPC_STRUCT_END()
+
+// TODO(jiesun): define this.
+IPC_STRUCT_BEGIN(GpuVideoDecoderFormatChangeParam)
+ IPC_STRUCT_MEMBER(int32, input_buffer_size)
+ IPC_STRUCT_MEMBER(base::SharedMemoryHandle, input_buffer_handle)
+IPC_STRUCT_END()
+
+#if defined(OS_MACOSX)
+IPC_STRUCT_BEGIN(GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params)
+ IPC_STRUCT_MEMBER(int32, renderer_id)
+ IPC_STRUCT_MEMBER(int32, render_view_id)
+ IPC_STRUCT_MEMBER(gfx::PluginWindowHandle, window)
+ IPC_STRUCT_MEMBER(int32, width)
+ IPC_STRUCT_MEMBER(int32, height)
+ IPC_STRUCT_MEMBER(uint64, identifier)
+IPC_STRUCT_END()
+
+IPC_STRUCT_BEGIN(GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params)
+ IPC_STRUCT_MEMBER(int32, renderer_id)
+ IPC_STRUCT_MEMBER(int32, render_view_id)
+ IPC_STRUCT_MEMBER(gfx::PluginWindowHandle, window)
+ IPC_STRUCT_MEMBER(uint64, surface_id)
+ IPC_STRUCT_MEMBER(int32, route_id)
+ IPC_STRUCT_MEMBER(uint64, swap_buffers_count)
+IPC_STRUCT_END()
+#endif
+
+IPC_STRUCT_TRAITS_BEGIN(DxDiagNode)
+ IPC_STRUCT_TRAITS_MEMBER(values)
+ IPC_STRUCT_TRAITS_MEMBER(children)
+IPC_STRUCT_TRAITS_END()
+
+IPC_ENUM_TRAITS(GPUInfo::Level)
+
+IPC_STRUCT_TRAITS_BEGIN(GPUInfo)
+ IPC_STRUCT_TRAITS_MEMBER(level)
+ IPC_STRUCT_TRAITS_MEMBER(initialization_time)
+ IPC_STRUCT_TRAITS_MEMBER(vendor_id)
+ IPC_STRUCT_TRAITS_MEMBER(device_id)
+ IPC_STRUCT_TRAITS_MEMBER(driver_vendor)
+ IPC_STRUCT_TRAITS_MEMBER(driver_version)
+ IPC_STRUCT_TRAITS_MEMBER(driver_date)
+ IPC_STRUCT_TRAITS_MEMBER(pixel_shader_version)
+ IPC_STRUCT_TRAITS_MEMBER(vertex_shader_version)
+ IPC_STRUCT_TRAITS_MEMBER(gl_version)
+ IPC_STRUCT_TRAITS_MEMBER(gl_version_string)
+ IPC_STRUCT_TRAITS_MEMBER(gl_vendor)
+ IPC_STRUCT_TRAITS_MEMBER(gl_renderer)
+ IPC_STRUCT_TRAITS_MEMBER(gl_extensions)
+ IPC_STRUCT_TRAITS_MEMBER(can_lose_context)
+ IPC_STRUCT_TRAITS_MEMBER(collection_error)
+#if defined(OS_WIN)
+ IPC_STRUCT_TRAITS_MEMBER(dx_diagnostics)
+#endif
+IPC_STRUCT_TRAITS_END()
+
+//------------------------------------------------------------------------------
+// GPU Messages
+// These are messages from the browser to the GPU process.
+
+// Tells the GPU process to initialize itself. The browser explicitly
+// requests this be done so that we are guaranteed that the channel is set
+// up between the browser and GPU process before doing any work that might
+// potentially crash the GPU process. Detection of the child process
+// exiting abruptly is predicated on having the IPC channel set up.
+IPC_MESSAGE_CONTROL0(GpuMsg_Initialize)
+
+// Tells the GPU process to create a new channel for communication with a
+// given renderer. The channel name is returned in a
+// GpuHostMsg_ChannelEstablished message. The renderer ID is passed so that
+// the GPU process reuses an existing channel to that process if it exists.
+// This ID is a unique opaque identifier generated by the browser process.
+IPC_MESSAGE_CONTROL1(GpuMsg_EstablishChannel,
+ int /* renderer_id */)
+
+// Tells the GPU process to close the channel identified by IPC channel
+// handle. If no channel can be identified, do nothing.
+IPC_MESSAGE_CONTROL1(GpuMsg_CloseChannel,
+ IPC::ChannelHandle /* channel_handle */)
+
+// Provides a synchronization point to guarantee that the processing of
+// previous asynchronous messages (i.e., GpuMsg_EstablishChannel) has
+// completed. (This message can't be synchronous because the
+// GpuProcessHost uses an IPC::ChannelProxy, which sends all messages
+// asynchronously.) Results in a GpuHostMsg_SynchronizeReply.
+IPC_MESSAGE_CONTROL0(GpuMsg_Synchronize)
+
+// Tells the GPU process to create a new command buffer that renders directly
+// to a native view. A corresponding GpuCommandBufferStub is created.
+IPC_MESSAGE_CONTROL4(GpuMsg_CreateViewCommandBuffer,
+ gfx::PluginWindowHandle, /* view */
+ int32, /* render_view_id */
+ int32, /* renderer_id */
+ GPUCreateCommandBufferConfig /* init_params */)
+
+// Tells the GPU process to create a context for collecting graphics card
+// information.
+IPC_MESSAGE_CONTROL1(GpuMsg_CollectGraphicsInfo,
+ GPUInfo::Level /* level */)
+
+#if defined(OS_MACOSX)
+// Tells the GPU process that the browser process handled the swap
+// buffers request with the given number. Note that it is possible
+// for the browser process to coalesce frames; it is not guaranteed
+// that every GpuHostMsg_AcceleratedSurfaceBuffersSwapped message
+// will result in a buffer swap on the browser side.
+IPC_MESSAGE_CONTROL3(GpuMsg_AcceleratedSurfaceBuffersSwappedACK,
+ int /* renderer_id */,
+ int32 /* route_id */,
+ uint64 /* swap_buffers_count */)
+
+// Tells the GPU process that the IOSurface of the buffer belonging to
+// |renderer_route_id| a given id was destroyed, either by the user closing the
+// tab hosting the surface, or by the renderer navigating to a new page.
+IPC_MESSAGE_CONTROL2(GpuMsg_DidDestroyAcceleratedSurface,
+ int /* renderer_id */,
+ int32 /* renderer_route_id */)
+#endif
+
+// Tells the GPU process to crash.
+IPC_MESSAGE_CONTROL0(GpuMsg_Crash)
+
+// Tells the GPU process to hang.
+IPC_MESSAGE_CONTROL0(GpuMsg_Hang)
+
+// The browser sends this to a renderer process in response to a
+// GpuHostMsg_EstablishGpuChannel message.
+IPC_MESSAGE_CONTROL3(GpuMsg_GpuChannelEstablished,
+ IPC::ChannelHandle /* handle to channel */,
+ base::ProcessHandle /* renderer_process_for_gpu */,
+ GPUInfo /* stats about GPU process*/)
+
+//------------------------------------------------------------------------------
+// GPU Host Messages
+// These are messages to the browser.
+
+// A renderer sends this when it wants to create a connection to the GPU
+// process. The browser will create the GPU process if necessary, and will
+// return a handle to the channel via a GpuChannelEstablished message.
+IPC_MESSAGE_CONTROL0(GpuHostMsg_EstablishGpuChannel)
+
+// A renderer sends this to the browser process to provide a synchronization
+// point for GPU operations, in particular to make sure the GPU channel has
+// been established.
+IPC_SYNC_MESSAGE_CONTROL0_0(GpuHostMsg_SynchronizeGpu)
+
+// A renderer sends this to the browser process when it wants to
+// create a GL context associated with the given view_id.
+IPC_SYNC_MESSAGE_CONTROL2_1(GpuHostMsg_CreateViewCommandBuffer,
+ int32, /* render_view_id */
+ GPUCreateCommandBufferConfig, /* init_params */
+ int32 /* route_id */)
+
+// Response from GPU to a GpuHostMsg_EstablishChannel message.
+IPC_MESSAGE_CONTROL2(GpuHostMsg_ChannelEstablished,
+ IPC::ChannelHandle, /* channel_handle */
+ GPUInfo /* GPU logging stats */)
+
+// Respond from GPU to a GpuMsg_CreateViewCommandBuffer message.
+IPC_MESSAGE_CONTROL1(GpuHostMsg_CommandBufferCreated,
+ int32 /* route_id */)
+
+// Request from GPU to free the browser resources associated with the
+// command buffer.
+IPC_MESSAGE_CONTROL3(GpuHostMsg_DestroyCommandBuffer,
+ gfx::PluginWindowHandle, /* view */
+ int32, /* render_view_id */
+ int32 /* renderer_id */)
+
+// Response from GPU to a GpuMsg_CollectGraphicsInfo.
+IPC_MESSAGE_CONTROL1(GpuHostMsg_GraphicsInfoCollected,
+ GPUInfo /* GPU logging stats */)
+
+// Message from GPU to add a GPU log message to the about:gpu page.
+IPC_MESSAGE_CONTROL3(GpuHostMsg_OnLogMessage,
+ int /*severity*/,
+ std::string /* header */,
+ std::string /* message */)
+
+// Response from GPU to a GpuMsg_Synchronize message.
+IPC_MESSAGE_CONTROL0(GpuHostMsg_SynchronizeReply)
+
+#if defined(OS_LINUX) && !defined(TOUCH_UI)
+// Resize the window that is being drawn into. It's important that this
+// resize be synchronized with the swapping of the front and back buffers.
+IPC_SYNC_MESSAGE_CONTROL2_1(GpuHostMsg_ResizeXID,
+ unsigned long, /* xid */
+ gfx::Size, /* size */
+ bool /* success */)
+#elif defined(OS_MACOSX)
+// This message, used on Mac OS X 10.6 and later (where IOSurface is
+// supported), is sent from the GPU process to the browser to indicate that a
+// new backing store was allocated for the given "window" (fake
+// PluginWindowHandle). The renderer ID and render view ID are needed in
+// order to uniquely identify the RenderWidgetHostView on the browser side.
+IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfaceSetIOSurface,
+ GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params)
+
+// This message notifies the browser process that the renderer
+// swapped the buffers associated with the given "window", which
+// should cause the browser to redraw the compositor's contents.
+IPC_MESSAGE_CONTROL1(GpuHostMsg_AcceleratedSurfaceBuffersSwapped,
+ GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params)
+#elif defined(OS_WIN)
+IPC_MESSAGE_CONTROL2(GpuHostMsg_ScheduleComposite,
+ int32, /* renderer_id */
+ int32 /* render_view_id */)
+#endif
+
+//------------------------------------------------------------------------------
+// GPU Channel Messages
+// These are messages from a renderer process to the GPU process.
+
+// Initialize a channel between a renderer process and a GPU process. The
+// renderer passes its process handle to the GPU process, which gives gives the
+// GPU process the ability to map handles from the renderer process. This must
+// be the first message sent on a newly connected channel.
+IPC_MESSAGE_CONTROL1(GpuChannelMsg_Initialize,
+ base::ProcessHandle /* renderer_process_for_gpu */)
+
+// Tells the GPU process to create a new command buffer that renders to an
+// offscreen frame buffer. If parent_route_id is not zero, the texture backing
+// the frame buffer is mapped into the corresponding parent command buffer's
+// namespace, with the name of parent_texture_id. This ID is in the parent's
+// namespace.
+IPC_SYNC_MESSAGE_CONTROL4_1(GpuChannelMsg_CreateOffscreenCommandBuffer,
+ int32, /* parent_route_id */
+ gfx::Size, /* size */
+ GPUCreateCommandBufferConfig, /* init_params */
+ uint32, /* parent_texture_id */
+ int32 /* route_id */)
+
+// The CommandBufferProxy sends this to the GpuCommandBufferStub in its
+// destructor, so that the stub deletes the actual CommandBufferService
+// object that it's hosting.
+// TODO(apatrick): Implement this.
+IPC_SYNC_MESSAGE_CONTROL1_0(GpuChannelMsg_DestroyCommandBuffer,
+ int32 /* instance_id */)
+
+// Create hardware video decoder && associate it with the output |decoder_id|;
+// We need this to be control message because we had to map the GpuChannel and
+// |decoder_id|.
+IPC_MESSAGE_CONTROL2(GpuChannelMsg_CreateVideoDecoder,
+ int32, /* context_route_id */
+ int32) /* decoder_id */
+
+// Release all resource of the hardware video decoder which was assocaited
+// with the input |decoder_id|.
+// TODO(hclam): This message needs to be asynchronous.
+IPC_SYNC_MESSAGE_CONTROL1_0(GpuChannelMsg_DestroyVideoDecoder,
+ int32 /* decoder_id */)
+
+//------------------------------------------------------------------------------
+// GPU Command Buffer Messages
+// These are messages between a renderer process to the GPU process relating to
+// a single OpenGL context.
+// Initialize a command buffer with the given number of command entries.
+// Returns the shared memory handle for the command buffer mapped to the
+// calling process.
+IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_Initialize,
+ base::SharedMemoryHandle /* ring_buffer */,
+ int32 /* size */,
+ bool /* result */)
+
+// Get the current state of the command buffer.
+IPC_SYNC_MESSAGE_ROUTED0_1(GpuCommandBufferMsg_GetState,
+ gpu::CommandBuffer::State /* state */)
+
+// Get the current state of the command buffer asynchronously. State is
+// returned via UpdateState message.
+IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_AsyncGetState)
+
+// Synchronize the put and get offsets of both processes. Caller passes its
+// current put offset. Current state (including get offset) is returned.
+IPC_SYNC_MESSAGE_ROUTED1_1(GpuCommandBufferMsg_Flush,
+ int32 /* put_offset */,
+ gpu::CommandBuffer::State /* state */)
+
+// Asynchronously synchronize the put and get offsets of both processes.
+// Caller passes its current put offset. Current state (including get offset)
+// is returned via an UpdateState message.
+IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_AsyncFlush,
+ int32 /* put_offset */)
+
+// Return the current state of the command buffer following a request via
+// an AsyncGetState or AsyncFlush message. (This message is sent from the
+// GPU process to the renderer process.)
+IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_UpdateState,
+ gpu::CommandBuffer::State /* state */)
+
+// Indicates that a SwapBuffers call has been issued.
+IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_SwapBuffers)
+
+// Create a shared memory transfer buffer. Returns an id that can be used to
+// identify the transfer buffer from a comment.
+IPC_SYNC_MESSAGE_ROUTED1_1(GpuCommandBufferMsg_CreateTransferBuffer,
+ int32 /* size */,
+ int32 /* id */)
+
+// Register an existing shared memory transfer buffer. Returns an id that can be
+// used to identify the transfer buffer from a command buffer.
+IPC_SYNC_MESSAGE_ROUTED2_1(GpuCommandBufferMsg_RegisterTransferBuffer,
+ base::SharedMemoryHandle /* transfer_buffer */,
+ size_t /* size */,
+ int32 /* id */)
+
+// Destroy a previously created transfer buffer.
+IPC_SYNC_MESSAGE_ROUTED1_0(GpuCommandBufferMsg_DestroyTransferBuffer,
+ int32 /* id */)
+
+// Get the shared memory handle for a transfer buffer mapped to the callers
+// process.
+IPC_SYNC_MESSAGE_ROUTED1_2(GpuCommandBufferMsg_GetTransferBuffer,
+ int32 /* id */,
+ base::SharedMemoryHandle /* transfer_buffer */,
+ uint32 /* size */)
+
+// Send from command buffer stub to proxy when window is invalid and must be
+// repainted.
+IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_NotifyRepaint)
+
+// Tells the GPU process to resize an offscreen frame buffer.
+IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_ResizeOffscreenFrameBuffer,
+ gfx::Size /* size */)
+
+#if defined(OS_MACOSX)
+// On Mac OS X the GPU plugin must be offscreen, because there is no
+// true cross-process window hierarchy. For this reason we must send
+// resize events explicitly to the command buffer stub so it can
+// reallocate its backing store and send the new one back to the
+// browser. This message is currently used only on 10.6 and later.
+IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_SetWindowSize,
+ gfx::Size /* size */)
+#endif
+
+//------------------------------------------------------------------------------
+// GPU Video Decoder Messages
+// These messages are sent from Renderer process to GPU process.
+// Initialize and configure GpuVideoDecoder asynchronously.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderMsg_Initialize,
+ GpuVideoDecoderInitParam)
+
+// Destroy and release GpuVideoDecoder asynchronously.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderMsg_Destroy)
+
+// Start decoder flushing operation.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderMsg_Flush)
+
+// Tell the decoder to start prerolling.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderMsg_Preroll)
+
+// Send input buffer to GpuVideoDecoder.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderMsg_EmptyThisBuffer,
+ GpuVideoDecoderInputBufferParam)
+
+// Ask the GPU process to produce a video frame with the ID.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderMsg_ProduceVideoFrame,
+ int32) /* Video Frame ID */
+
+// Sent from Renderer process to the GPU process to notify that textures are
+// generated for a video frame.
+IPC_MESSAGE_ROUTED2(GpuVideoDecoderMsg_VideoFrameAllocated,
+ int32, /* Video Frame ID */
+ std::vector<uint32>) /* Textures for video frame */
+
+//------------------------------------------------------------------------------
+// GPU Video Decoder Host Messages
+// These messages are sent from GPU process to Renderer process.
+// Inform GpuVideoDecoderHost that a GpuVideoDecoder is created.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderHostMsg_CreateVideoDecoderDone,
+ int32) /* decoder_id */
+
+// Confirm GpuVideoDecoder had been initialized or failed to initialize.
+// TODO(hclam): Change this to Done instead of ACK.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderHostMsg_InitializeACK,
+ GpuVideoDecoderInitDoneParam)
+
+// Confrim GpuVideoDecoder had been destroyed properly.
+// TODO(hclam): Change this to Done instead of ACK.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_DestroyACK)
+
+// Confirm decoder had been flushed.
+// TODO(hclam): Change this to Done instead of ACK.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_FlushACK)
+
+// Confirm preroll operation is done.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_PrerollDone)
+
+// GpuVideoDecoder has consumed input buffer from transfer buffer.
+// TODO(hclam): Change this to Done instead of ACK.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_EmptyThisBufferACK)
+
+// GpuVideoDecoder require new input buffer.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_EmptyThisBufferDone)
+
+// GpuVideoDecoder reports that a video frame is ready to be consumed.
+IPC_MESSAGE_ROUTED4(GpuVideoDecoderHostMsg_ConsumeVideoFrame,
+ int32, /* Video Frame ID */
+ int64, /* Timestamp in microseconds */
+ int64, /* Duration in microseconds */
+ int32) /* Flags */
+
+// Allocate video frames for output of the hardware video decoder.
+IPC_MESSAGE_ROUTED4(GpuVideoDecoderHostMsg_AllocateVideoFrames,
+ int32, /* Number of video frames to generate */
+ uint32, /* Width of the video frame */
+ uint32, /* Height of the video frame */
+ int32 /* Format of the video frame */)
+
+// Release all video frames allocated for a hardware video decoder.
+IPC_MESSAGE_ROUTED0(GpuVideoDecoderHostMsg_ReleaseAllVideoFrames)
+
+// GpuVideoDecoder report output format change.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderHostMsg_MediaFormatChange,
+ GpuVideoDecoderFormatChangeParam)
+
+// GpuVideoDecoder report error.
+IPC_MESSAGE_ROUTED1(GpuVideoDecoderHostMsg_ErrorNotification,
+ GpuVideoDecoderErrorInfoParam)
diff --git a/content/content_common.gypi b/content/content_common.gypi
index a3d382a..fa83cf9 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -36,6 +36,8 @@
'common/content_paths.h',
'common/content_switches.cc',
'common/content_switches.h',
+ 'common/dx_diag_node.cc',
+ 'common/dx_diag_node.h',
'common/file_system/file_system_dispatcher.cc',
'common/file_system/file_system_dispatcher.h',
'common/file_system/webfilesystem_callback_dispatcher.cc',
@@ -45,6 +47,9 @@
'common/file_system/webfilewriter_impl.cc',
'common/file_system/webfilewriter_impl.h',
'common/file_system_messages.h',
+ 'common/gpu_info.cc',
+ 'common/gpu_info.h',
+ 'common/gpu_messages.h',
'common/message_router.cc',
'common/message_router.h',
'common/notification_details.cc',