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

Side by Side Diff: content/browser/gpu/gpu_process_host.cc

Issue 7850026: Aura under Linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: White spaces Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/gpu/gpu_process_host.h" 5 #include "content/browser/gpu/gpu_process_host.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 // Number of times the gpu process has crashed in the current browser session. 53 // Number of times the gpu process has crashed in the current browser session.
54 static int g_gpu_crash_count = 0; 54 static int g_gpu_crash_count = 0;
55 55
56 // Maximum number of times the gpu process is allowed to crash in a session. 56 // Maximum number of times the gpu process is allowed to crash in a session.
57 // Once this limit is reached, any request to launch the gpu process will fail. 57 // Once this limit is reached, any request to launch the gpu process will fail.
58 static const int kGpuMaxCrashCount = 3; 58 static const int kGpuMaxCrashCount = 3;
59 59
60 int g_last_host_id = 0; 60 int g_last_host_id = 0;
61 61
62 #if defined(TOOLKIT_USES_GTK) 62 #if defined(TOOLKIT_USES_GTK) && !defined(USE_AURA)
63 63
64 class ReleasePermanentXIDDispatcher: public Task { 64 class ReleasePermanentXIDDispatcher: public Task {
65 public: 65 public:
66 explicit ReleasePermanentXIDDispatcher(gfx::PluginWindowHandle surface); 66 explicit ReleasePermanentXIDDispatcher(gfx::PluginWindowHandle surface);
67 void Run(); 67 void Run();
68 private: 68 private:
69 gfx::PluginWindowHandle surface_; 69 gfx::PluginWindowHandle surface_;
70 }; 70 };
71 71
72 ReleasePermanentXIDDispatcher::ReleasePermanentXIDDispatcher( 72 ReleasePermanentXIDDispatcher::ReleasePermanentXIDDispatcher(
(...skipping 15 matching lines...) Expand all
88 renderer_id, cause); 88 renderer_id, cause);
89 if (host) { 89 if (host) {
90 host->Send(message); 90 host->Send(message);
91 } else { 91 } else {
92 delete message; 92 delete message;
93 } 93 }
94 } 94 }
95 95
96 } // anonymous namespace 96 } // anonymous namespace
97 97
98 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 98 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
99 // Used to put a lock on surfaces so that the window to which the GPU 99 // Used to put a lock on surfaces so that the window to which the GPU
100 // process is drawing to doesn't disappear while it is drawing when 100 // process is drawing to doesn't disappear while it is drawing when
101 // a tab is closed. 101 // a tab is closed.
102 class GpuProcessHost::SurfaceRef { 102 class GpuProcessHost::SurfaceRef {
103 public: 103 public:
104 explicit SurfaceRef(gfx::PluginWindowHandle surface); 104 explicit SurfaceRef(gfx::PluginWindowHandle surface);
105 ~SurfaceRef(); 105 ~SurfaceRef();
106 private: 106 private:
107 gfx::PluginWindowHandle surface_; 107 gfx::PluginWindowHandle surface_;
108 }; 108 };
109 109
110 GpuProcessHost::SurfaceRef::SurfaceRef(gfx::PluginWindowHandle surface) 110 GpuProcessHost::SurfaceRef::SurfaceRef(gfx::PluginWindowHandle surface)
111 : surface_(surface) { 111 : surface_(surface) {
112 GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance(); 112 GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
113 if (!manager->AddRefPermanentXID(surface_)) { 113 if (!manager->AddRefPermanentXID(surface_)) {
114 LOG(ERROR) << "Surface " << surface << " cannot be referenced."; 114 LOG(ERROR) << "Surface " << surface << " cannot be referenced.";
115 } 115 }
116 } 116 }
117 117
118 GpuProcessHost::SurfaceRef::~SurfaceRef() { 118 GpuProcessHost::SurfaceRef::~SurfaceRef() {
119 BrowserThread::PostTask(BrowserThread::UI, 119 BrowserThread::PostTask(BrowserThread::UI,
120 FROM_HERE, 120 FROM_HERE,
121 new ReleasePermanentXIDDispatcher(surface_)); 121 new ReleasePermanentXIDDispatcher(surface_));
122 } 122 }
123 #endif // defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 123 #endif // defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
124 124
125 // This class creates a GPU thread (instead of a GPU process), when running 125 // This class creates a GPU thread (instead of a GPU process), when running
126 // with --in-process-gpu or --single-process. 126 // with --in-process-gpu or --single-process.
127 class GpuMainThread : public base::Thread { 127 class GpuMainThread : public base::Thread {
128 public: 128 public:
129 explicit GpuMainThread(const std::string& channel_id) 129 explicit GpuMainThread(const std::string& channel_id)
130 : base::Thread("Chrome_InProcGpuThread"), 130 : base::Thread("Chrome_InProcGpuThread"),
131 channel_id_(channel_id), 131 channel_id_(channel_id),
132 gpu_process_(NULL), 132 gpu_process_(NULL),
133 child_thread_(NULL) { 133 child_thread_(NULL) {
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 364
365 void GpuProcessHost::CreateViewCommandBuffer( 365 void GpuProcessHost::CreateViewCommandBuffer(
366 gfx::PluginWindowHandle compositing_surface, 366 gfx::PluginWindowHandle compositing_surface,
367 int32 render_view_id, 367 int32 render_view_id,
368 int32 renderer_id, 368 int32 renderer_id,
369 const GPUCreateCommandBufferConfig& init_params, 369 const GPUCreateCommandBufferConfig& init_params,
370 CreateCommandBufferCallback* callback) { 370 CreateCommandBufferCallback* callback) {
371 DCHECK(CalledOnValidThread()); 371 DCHECK(CalledOnValidThread());
372 linked_ptr<CreateCommandBufferCallback> wrapped_callback(callback); 372 linked_ptr<CreateCommandBufferCallback> wrapped_callback(callback);
373 373
374 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 374 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
375 ViewID view_id(renderer_id, render_view_id); 375 ViewID view_id(renderer_id, render_view_id);
376 376
377 // There should only be one such command buffer (for the compositor). In 377 // There should only be one such command buffer (for the compositor). In
378 // practice, if the GPU process lost a context, GraphicsContext3D with 378 // practice, if the GPU process lost a context, GraphicsContext3D with
379 // associated command buffer and view surface will not be gone until new 379 // associated command buffer and view surface will not be gone until new
380 // one is in place and all layers are reattached. 380 // one is in place and all layers are reattached.
381 linked_ptr<SurfaceRef> surface_ref; 381 linked_ptr<SurfaceRef> surface_ref;
382 SurfaceRefMap::iterator it = surface_refs_.find(view_id); 382 SurfaceRefMap::iterator it = surface_refs_.find(view_id);
383 if (it != surface_refs_.end()) 383 if (it != surface_refs_.end())
384 surface_ref = (*it).second; 384 surface_ref = (*it).second;
385 else 385 else
386 surface_ref.reset(new SurfaceRef(compositing_surface)); 386 surface_ref.reset(new SurfaceRef(compositing_surface));
387 #endif // defined(TOOLKIT_USES_GTK) && defined(TOUCH_UI) 387 #endif // defined(TOOLKIT_USES_GTK) && defined(TOUCH_UI) && !defined(USE_AURA)
388 388
389 if (compositing_surface != gfx::kNullPluginWindow && 389 if (compositing_surface != gfx::kNullPluginWindow &&
390 Send(new GpuMsg_CreateViewCommandBuffer( 390 Send(new GpuMsg_CreateViewCommandBuffer(
391 compositing_surface, render_view_id, renderer_id, init_params))) { 391 compositing_surface, render_view_id, renderer_id, init_params))) {
392 create_command_buffer_requests_.push(wrapped_callback); 392 create_command_buffer_requests_.push(wrapped_callback);
393 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 393 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
394 surface_refs_.insert(std::pair<ViewID, linked_ptr<SurfaceRef> >( 394 surface_refs_.insert(std::pair<ViewID, linked_ptr<SurfaceRef> >(
395 view_id, surface_ref)); 395 view_id, surface_ref));
396 #endif 396 #endif
397 } else { 397 } else {
398 CreateCommandBufferError(wrapped_callback.release(), MSG_ROUTING_NONE); 398 CreateCommandBufferError(wrapped_callback.release(), MSG_ROUTING_NONE);
399 } 399 }
400 } 400 }
401 401
402 void GpuProcessHost::OnChannelEstablished( 402 void GpuProcessHost::OnChannelEstablished(
403 const IPC::ChannelHandle& channel_handle) { 403 const IPC::ChannelHandle& channel_handle) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 if (route_id == MSG_ROUTING_NONE) 436 if (route_id == MSG_ROUTING_NONE)
437 CreateCommandBufferError(callback.release(), route_id); 437 CreateCommandBufferError(callback.release(), route_id);
438 else 438 else
439 callback->Run(route_id); 439 callback->Run(route_id);
440 } 440 }
441 } 441 }
442 442
443 void GpuProcessHost::OnDestroyCommandBuffer( 443 void GpuProcessHost::OnDestroyCommandBuffer(
444 gfx::PluginWindowHandle window, int32 renderer_id, 444 gfx::PluginWindowHandle window, int32 renderer_id,
445 int32 render_view_id) { 445 int32 render_view_id) {
446 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 446 #if defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
447 ViewID view_id(renderer_id, render_view_id); 447 ViewID view_id(renderer_id, render_view_id);
448 SurfaceRefMap::iterator it = surface_refs_.find(view_id); 448 SurfaceRefMap::iterator it = surface_refs_.find(view_id);
449 if (it != surface_refs_.end()) 449 if (it != surface_refs_.end())
450 surface_refs_.erase(it); 450 surface_refs_.erase(it);
451 #endif // defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) 451 #endif // defined(TOOLKIT_USES_GTK) && !defined(TOUCH_UI) && !defined(USE_AURA)
452 } 452 }
453 453
454 void GpuProcessHost::OnGraphicsInfoCollected(const GPUInfo& gpu_info) { 454 void GpuProcessHost::OnGraphicsInfoCollected(const GPUInfo& gpu_info) {
455 GpuDataManager::GetInstance()->UpdateGpuInfo(gpu_info); 455 GpuDataManager::GetInstance()->UpdateGpuInfo(gpu_info);
456 } 456 }
457 457
458 bool GpuProcessHost::CanShutdown() { 458 bool GpuProcessHost::CanShutdown() {
459 return true; 459 return true;
460 } 460 }
461 461
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 scoped_ptr<EstablishChannelCallback> wrapped_callback(callback); 610 scoped_ptr<EstablishChannelCallback> wrapped_callback(callback);
611 wrapped_callback->Run(channel_handle, renderer_process_for_gpu, gpu_info); 611 wrapped_callback->Run(channel_handle, renderer_process_for_gpu, gpu_info);
612 } 612 }
613 613
614 void GpuProcessHost::CreateCommandBufferError( 614 void GpuProcessHost::CreateCommandBufferError(
615 CreateCommandBufferCallback* callback, int32 route_id) { 615 CreateCommandBufferCallback* callback, int32 route_id) {
616 scoped_ptr<GpuProcessHost::CreateCommandBufferCallback> 616 scoped_ptr<GpuProcessHost::CreateCommandBufferCallback>
617 wrapped_callback(callback); 617 wrapped_callback(callback);
618 callback->Run(route_id); 618 callback->Run(route_id);
619 } 619 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698