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

Side by Side Diff: gpu/ipc/service/gpu_command_buffer_stub.cc

Issue 2378583003: Ping watchdog thread during GpuChannel destruction (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "gpu/ipc/service/gpu_command_buffer_stub.h" 5 #include "gpu/ipc/service/gpu_command_buffer_stub.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/hash.h" 11 #include "base/hash.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/memory/shared_memory.h" 15 #include "base/memory/shared_memory.h"
16 #include "base/time/time.h" 16 #include "base/time/time.h"
17 #include "base/trace_event/trace_event.h" 17 #include "base/trace_event/trace_event.h"
18 #include "build/build_config.h" 18 #include "build/build_config.h"
19 #include "gpu/command_buffer/common/constants.h" 19 #include "gpu/command_buffer/common/constants.h"
20 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" 20 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
21 #include "gpu/command_buffer/common/mailbox.h" 21 #include "gpu/command_buffer/common/mailbox.h"
22 #include "gpu/command_buffer/common/sync_token.h" 22 #include "gpu/command_buffer/common/sync_token.h"
23 #include "gpu/command_buffer/service/gl_context_virtual.h" 23 #include "gpu/command_buffer/service/gl_context_virtual.h"
24 #include "gpu/command_buffer/service/gl_state_restorer_impl.h" 24 #include "gpu/command_buffer/service/gl_state_restorer_impl.h"
25 #include "gpu/command_buffer/service/image_manager.h" 25 #include "gpu/command_buffer/service/image_manager.h"
26 #include "gpu/command_buffer/service/logger.h" 26 #include "gpu/command_buffer/service/logger.h"
27 #include "gpu/command_buffer/service/mailbox_manager.h" 27 #include "gpu/command_buffer/service/mailbox_manager.h"
28 #include "gpu/command_buffer/service/memory_tracking.h" 28 #include "gpu/command_buffer/service/memory_tracking.h"
29 #include "gpu/command_buffer/service/progress_reporter.h"
29 #include "gpu/command_buffer/service/query_manager.h" 30 #include "gpu/command_buffer/service/query_manager.h"
30 #include "gpu/command_buffer/service/sync_point_manager.h" 31 #include "gpu/command_buffer/service/sync_point_manager.h"
31 #include "gpu/command_buffer/service/transfer_buffer_manager.h" 32 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
32 #include "gpu/ipc/common/gpu_messages.h" 33 #include "gpu/ipc/common/gpu_messages.h"
33 #include "gpu/ipc/service/gpu_channel.h" 34 #include "gpu/ipc/service/gpu_channel.h"
34 #include "gpu/ipc/service/gpu_channel_manager.h" 35 #include "gpu/ipc/service/gpu_channel_manager.h"
35 #include "gpu/ipc/service/gpu_channel_manager_delegate.h" 36 #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
36 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" 37 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
37 #include "gpu/ipc/service/gpu_memory_manager.h" 38 #include "gpu/ipc/service/gpu_memory_manager.h"
38 #include "gpu/ipc/service/gpu_memory_tracking.h" 39 #include "gpu/ipc/service/gpu_memory_tracking.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 private: 99 private:
99 ~GpuCommandBufferMemoryTracker() override {} 100 ~GpuCommandBufferMemoryTracker() override {}
100 std::unique_ptr<GpuMemoryTrackingGroup> tracking_group_; 101 std::unique_ptr<GpuMemoryTrackingGroup> tracking_group_;
101 const uint64_t client_tracing_id_; 102 const uint64_t client_tracing_id_;
102 const int client_id_; 103 const int client_id_;
103 const uint64_t share_group_tracing_guid_; 104 const uint64_t share_group_tracing_guid_;
104 105
105 DISALLOW_COPY_AND_ASSIGN(GpuCommandBufferMemoryTracker); 106 DISALLOW_COPY_AND_ASSIGN(GpuCommandBufferMemoryTracker);
106 }; 107 };
107 108
109 // GpuCommandBufferProgressReporter is used as a bridge between the
110 // ContextGroup and the GpuChannel's GpuWatchdogThread.
111 class GpuCommandBufferProgressReporter : public gles2::ProgressReporter {
112 public:
113 GpuCommandBufferProgressReporter(GpuChannel* channel) : channel_(channel) {}
114
115 void ReportProgress() override {
116 if (auto* watchdog = channel_->watchdog()) {
117 // CheckArmed posts a task. Throttle this so we don't post more than
vmiura 2016/09/30 18:24:35 Rather than adding throttling here, it seems we co
ericrk 2016/10/01 06:19:27 Good point - I don't want to overload this CL, so
118 // one task per second.
119 base::TimeTicks now = base::TimeTicks::Now();
120 if (now < next_check_time_)
121 return;
122
123 next_check_time_ = now + base::TimeDelta::FromSeconds(kMaxCheckRateS);
124 watchdog->CheckArmed();
125 }
126 }
127
128 private:
129 // The max rate at which we will signal the watchdog thread.
130 static const int kMaxCheckRateS = 1;
131
132 // The GpuChannel always outlives the GpuCommandBufferStub and the
133 // ContextGroups it creates, so it's safe to hold by raw pointer here.
134 GpuChannel* channel_;
135 base::TimeTicks next_check_time_;
136 };
137
108 // FastSetActiveURL will shortcut the expensive call to SetActiveURL when the 138 // FastSetActiveURL will shortcut the expensive call to SetActiveURL when the
109 // url_hash matches. 139 // url_hash matches.
110 void FastSetActiveURL(const GURL& url, size_t url_hash, GpuChannel* channel) { 140 void FastSetActiveURL(const GURL& url, size_t url_hash, GpuChannel* channel) {
111 // Leave the previously set URL in the empty case -- empty URLs are given by 141 // Leave the previously set URL in the empty case -- empty URLs are given by
112 // BlinkPlatformImpl::createOffscreenGraphicsContext3DProvider. Hopefully the 142 // BlinkPlatformImpl::createOffscreenGraphicsContext3DProvider. Hopefully the
113 // onscreen context URL was set previously and will show up even when a crash 143 // onscreen context URL was set previously and will show up even when a crash
114 // occurs during offscreen command processing. 144 // occurs during offscreen command processing.
115 if (url.is_empty()) 145 if (url.is_empty())
116 return; 146 return;
117 static size_t g_last_url_hash = 0; 147 static size_t g_last_url_hash = 0;
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 new gles2::FeatureInfo(manager->gpu_driver_bug_workarounds()); 492 new gles2::FeatureInfo(manager->gpu_driver_bug_workarounds());
463 gpu::GpuMemoryBufferFactory* gmb_factory = 493 gpu::GpuMemoryBufferFactory* gmb_factory =
464 channel_->gpu_channel_manager()->gpu_memory_buffer_factory(); 494 channel_->gpu_channel_manager()->gpu_memory_buffer_factory();
465 context_group_ = new gles2::ContextGroup( 495 context_group_ = new gles2::ContextGroup(
466 manager->gpu_preferences(), channel_->mailbox_manager(), 496 manager->gpu_preferences(), channel_->mailbox_manager(),
467 new GpuCommandBufferMemoryTracker(channel_, 497 new GpuCommandBufferMemoryTracker(channel_,
468 command_buffer_id_.GetUnsafeValue()), 498 command_buffer_id_.GetUnsafeValue()),
469 manager->shader_translator_cache(), 499 manager->shader_translator_cache(),
470 manager->framebuffer_completeness_cache(), feature_info, 500 manager->framebuffer_completeness_cache(), feature_info,
471 init_params.attribs.bind_generates_resource, 501 init_params.attribs.bind_generates_resource,
472 gmb_factory ? gmb_factory->AsImageFactory() : nullptr); 502 gmb_factory ? gmb_factory->AsImageFactory() : nullptr,
503 base::MakeUnique<GpuCommandBufferProgressReporter>(channel_));
473 } 504 }
474 505
475 #if defined(OS_MACOSX) 506 #if defined(OS_MACOSX)
476 // Virtualize PreferIntegratedGpu contexts by default on OS X to prevent 507 // Virtualize PreferIntegratedGpu contexts by default on OS X to prevent
477 // performance regressions when enabling FCM. 508 // performance regressions when enabling FCM.
478 // http://crbug.com/180463 509 // http://crbug.com/180463
479 if (init_params.attribs.gpu_preference == gl::PreferIntegratedGpu) 510 if (init_params.attribs.gpu_preference == gl::PreferIntegratedGpu)
480 use_virtualized_gl_context_ = true; 511 use_virtualized_gl_context_ = true;
481 #endif 512 #endif
482 513
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, params)); 1144 Send(new GpuCommandBufferMsg_SwapBuffersCompleted(route_id_, params));
1114 } 1145 }
1115 1146
1116 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, 1147 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase,
1117 base::TimeDelta interval) { 1148 base::TimeDelta interval) {
1118 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, 1149 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase,
1119 interval)); 1150 interval));
1120 } 1151 }
1121 1152
1122 } // namespace gpu 1153 } // namespace gpu
OLDNEW
« gpu/command_buffer/service/context_group.cc ('K') | « gpu/gles2_conform_support/egl/context.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698