Chromium Code Reviews| Index: chrome/test/gpu/gpu_pixel_browsertest.cc |
| =================================================================== |
| --- chrome/test/gpu/gpu_pixel_browsertest.cc (revision 69024) |
| +++ chrome/test/gpu/gpu_pixel_browsertest.cc (working copy) |
| @@ -7,6 +7,7 @@ |
| #include "app/app_switches.h" |
| #include "app/gfx/gl/gl_implementation.h" |
| +#include "base/callback.h" |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| #include "base/file_util.h" |
| @@ -78,6 +79,51 @@ |
| browser->window()->SetBounds(window_rect); |
| } |
| +// Observes when the GPU info has been collected and quits the current message |
| +// loop. |
| +class GPUInfoCollectedObserver { |
| + public: |
| + explicit GPUInfoCollectedObserver(GpuProcessHostUIShim* gpu_host_shim) |
| + : gpu_info_collected_(false) { |
| + gpu_host_shim->set_gpu_info_collected_callback( |
| + NewCallback(this, &GPUInfoCollectedObserver::OnGpuInfoCollected)); |
| + } |
| + |
| + void OnGpuInfoCollected() { |
| + gpu_info_collected_ = true; |
| + MessageLoopForUI::current()->Quit(); |
| + } |
| + |
| + bool gpu_info_collected() { return gpu_info_collected_; } |
| + |
| + private: |
| + bool gpu_info_collected_; |
| +}; |
| + |
| +// Collects info about the GPU. Iff the info is collected and it is valid, |
| +// |client_info| will be set and true will be returned. This will return false |
| +// if we are running in a virtualized environment. |
| +bool CollectGPUInfo(GPUInfo* client_info) { |
| + CHECK(client_info); |
| + GpuProcessHostUIShim* gpu_host_shim = GpuProcessHostUIShim::GetInstance(); |
| + if (!gpu_host_shim) |
| + return false; |
| + GPUInfo info = gpu_host_shim->gpu_info(); |
| + if (info.progress() != GPUInfo::kComplete) { |
|
apatrick_chromium
2010/12/13 21:16:35
If you only need the device and vendor id, this sh
kkania
2010/12/13 22:12:57
Done.
|
| + GPUInfoCollectedObserver observer(gpu_host_shim); |
| + gpu_host_shim->CollectGraphicsInfoAsynchronously(); |
| + ui_test_utils::RunMessageLoop(); |
| + if (!observer.gpu_info_collected()) |
| + return false; |
| + info = gpu_host_shim->gpu_info(); |
| + } |
| + if (info.vendor_id() == 0) { |
| + return false; |
| + } |
| + *client_info = info; |
| + return true; |
| +} |
| + |
| } // namespace |
| // Test fixture for GPU image comparison tests. |
| @@ -156,15 +202,16 @@ |
| #error "Not implemented for this platform" |
| #endif |
| if (using_gpu_) { |
| - const GPUInfo& info = GpuProcessHostUIShim::GetInstance()->gpu_info(); |
| - if (info.progress() != GPUInfo::kComplete) { |
| + GPUInfo info; |
| + if (!CollectGPUInfo(&info)) { |
| LOG(ERROR) << "Could not get gpu info"; |
| return false; |
| } |
| - img_name = StringPrintf("%s_%s_%x-%x.png", |
| + img_name = base::StringPrintf("%s_%s_%04x-%04x.png", |
| img_name.c_str(), os_label, info.vendor_id(), info.device_id()); |
| } else { |
| - img_name = StringPrintf("%s_%s_mesa.png", img_name.c_str(), os_label); |
| + img_name = base::StringPrintf("%s_%s_mesa.png", |
| + img_name.c_str(), os_label); |
| } |
| // Read the reference image and verify the images' dimensions are equal. |