diff options
Diffstat (limited to 'chrome/common')
-rw-r--r-- | chrome/common/chrome_switches.cc | 4 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 1 | ||||
-rw-r--r-- | chrome/common/gpu_info.cc | 10 | ||||
-rw-r--r-- | chrome/common/gpu_info.h | 8 | ||||
-rw-r--r-- | chrome/common/gpu_messages.cc | 11 | ||||
-rw-r--r-- | chrome/common/gpu_messages_unittest.cc | 5 |
6 files changed, 36 insertions, 3 deletions
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 1a6b7d0..30dd178 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -195,6 +195,10 @@ const char kDisableGeolocation[] = "disable-geolocation"; // Disable the GLSL translator. const char kDisableGLSLTranslator[] = "disable-glsl-translator"; +// Disable the thread that crashes the GPU process if it stops responding to +// messages. +const char kDisableGpuWatchdog[] = "disable-gpu-watchdog"; + // Suppresses hang monitor dialogs in renderer processes. This may allow slow // unload handlers on a page to prevent the tab from closing, but the Task // Manager can be used to terminate the offending process in this case. diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 0e742a0..93558c9 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -67,6 +67,7 @@ extern const char kDisableExtensions[]; extern const char kDisableFileSystem[]; extern const char kDisableGLSLTranslator[]; extern const char kDisableGeolocation[]; +extern const char kDisableGpuWatchdog[]; extern const char kDisableHangMonitor[]; extern const char kDisableHistoryQuickProvider[]; extern const char kDisableHistoryURLProvider[]; diff --git a/chrome/common/gpu_info.cc b/chrome/common/gpu_info.cc index 667c375..64f0498 100644 --- a/chrome/common/gpu_info.cc +++ b/chrome/common/gpu_info.cc @@ -16,6 +16,10 @@ bool GPUInfo::initialized() const { return initialized_; } +base::TimeDelta GPUInfo::initialization_time() const { + return initialization_time_; +} + uint32 GPUInfo::vendor_id() const { return vendor_id_; } @@ -45,6 +49,12 @@ bool GPUInfo::can_lose_context() const { return can_lose_context_; } +void GPUInfo::SetInitializationTime( + const base::TimeDelta& initialization_time) { + initialization_time_ = initialization_time; +} + + void GPUInfo::SetGraphicsInfo(uint32 vendor_id, uint32 device_id, const std::wstring& driver_version, uint32 pixel_shader_version, diff --git a/chrome/common/gpu_info.h b/chrome/common/gpu_info.h index 50728db..bdf8709 100644 --- a/chrome/common/gpu_info.h +++ b/chrome/common/gpu_info.h @@ -12,6 +12,7 @@ #include <string> #include "base/basictypes.h" +#include "base/time.h" #include "build/build_config.h" #include "chrome/common/dx_diag_node.h" @@ -23,6 +24,10 @@ class GPUInfo { // Returns whether this GPUInfo has been initialized with information bool initialized() const; + // The amount of time taken to get from the process starting to the message + // loop being pumped. + base::TimeDelta initialization_time() const; + // Return the DWORD (uint32) representing the graphics card vendor id. uint32 vendor_id() const; @@ -55,6 +60,8 @@ class GPUInfo { // semantics are available. bool can_lose_context() const; + void SetInitializationTime(const base::TimeDelta& initialization_time); + // Populate variables with passed in values void SetGraphicsInfo(uint32 vendor_id, uint32 device_id, const std::wstring& driver_version, @@ -72,6 +79,7 @@ class GPUInfo { private: bool initialized_; + base::TimeDelta initialization_time_; uint32 vendor_id_; uint32 device_id_; std::wstring driver_version_; diff --git a/chrome/common/gpu_messages.cc b/chrome/common/gpu_messages.cc index b8232b8..671a6a6 100644 --- a/chrome/common/gpu_messages.cc +++ b/chrome/common/gpu_messages.cc @@ -10,6 +10,7 @@ #include "gfx/rect.h" #include "gfx/size.h" #include "ipc/ipc_channel_handle.h" +#include "ipc/ipc_message_utils.h" #define MESSAGES_INTERNAL_IMPL_FILE \ "chrome/common/gpu_messages_internal.h" @@ -80,6 +81,7 @@ void ParamTraits<GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params> ::Log( #endif // if defined(OS_MACOSX) void ParamTraits<GPUInfo> ::Write(Message* m, const param_type& p) { + ParamTraits<base::TimeDelta> ::Write(m, p.initialization_time()); m->WriteUInt32(p.vendor_id()); m->WriteUInt32(p.device_id()); m->WriteWString(p.driver_version()); @@ -94,6 +96,7 @@ void ParamTraits<GPUInfo> ::Write(Message* m, const param_type& p) { } bool ParamTraits<GPUInfo> ::Read(const Message* m, void** iter, param_type* p) { + base::TimeDelta initialization_time; uint32 vendor_id; uint32 device_id; std::wstring driver_version; @@ -101,13 +104,15 @@ bool ParamTraits<GPUInfo> ::Read(const Message* m, void** iter, param_type* p) { uint32 vertex_shader_version; uint32 gl_version; bool can_lose_context; - bool ret = m->ReadUInt32(iter, &vendor_id); + bool ret = ParamTraits<base::TimeDelta> ::Read(m, iter, &initialization_time); + ret = ret && m->ReadUInt32(iter, &vendor_id); ret = ret && m->ReadUInt32(iter, &device_id); ret = ret && m->ReadWString(iter, &driver_version); ret = ret && m->ReadUInt32(iter, &pixel_shader_version); ret = ret && m->ReadUInt32(iter, &vertex_shader_version); ret = ret && m->ReadUInt32(iter, &gl_version); ret = ret && m->ReadBool(iter, &can_lose_context); + p->SetInitializationTime(initialization_time); p->SetGraphicsInfo(vendor_id, device_id, driver_version, @@ -126,7 +131,9 @@ bool ParamTraits<GPUInfo> ::Read(const Message* m, void** iter, param_type* p) { } void ParamTraits<GPUInfo> ::Log(const param_type& p, std::string* l) { - l->append(base::StringPrintf("<GPUInfo> %x %x %ls %d", + l->append(base::StringPrintf("<GPUInfo> %d %x %x %ls %d", + static_cast<int32>( + p.initialization_time().InMilliseconds()), p.vendor_id(), p.device_id(), p.driver_version().c_str(), diff --git a/chrome/common/gpu_messages_unittest.cc b/chrome/common/gpu_messages_unittest.cc index 455458f..59d42ed 100644 --- a/chrome/common/gpu_messages_unittest.cc +++ b/chrome/common/gpu_messages_unittest.cc @@ -13,6 +13,7 @@ TEST(GPUIPCMessageTest, GPUInfo) { GPUInfo input; // Test variables taken from Lenovo T61 + input.SetInitializationTime(base::TimeDelta::FromMilliseconds(100)); input.SetGraphicsInfo(0x10de, 0x429, L"6.14.11.7715", 0xffff0300, 0xfffe0300, @@ -25,6 +26,8 @@ TEST(GPUIPCMessageTest, GPUInfo) { GPUInfo output; void* iter = NULL; EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output)); + EXPECT_EQ(input.initialization_time().InMilliseconds(), + output.initialization_time().InMilliseconds()); EXPECT_EQ(input.vendor_id(), output.vendor_id()); EXPECT_EQ(input.device_id(), output.device_id()); EXPECT_EQ(input.driver_version(), output.driver_version()); @@ -35,5 +38,5 @@ TEST(GPUIPCMessageTest, GPUInfo) { std::string log_message; IPC::LogParam(output, &log_message); - EXPECT_STREQ("<GPUInfo> 10de 429 6.14.11.7715 1", log_message.c_str()); + EXPECT_STREQ("<GPUInfo> 100 10de 429 6.14.11.7715 1", log_message.c_str()); } |