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

Unified Diff: gpu/command_buffer/service/context_group.cc

Issue 2378583003: Ping watchdog thread during GpuChannel destruction (Closed)
Patch Set: Fix lifetime and use nullptr 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/context_group.h ('k') | gpu/command_buffer/service/context_group_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/context_group.cc
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc
index f8c67f832dadc81d9649f87a502c8af6cb7b2d72..539758427695de011d2356b3860b9549633ffc1d 100644
--- a/gpu/command_buffer/service/context_group.cc
+++ b/gpu/command_buffer/service/context_group.cc
@@ -18,6 +18,7 @@
#include "gpu/command_buffer/service/mailbox_manager_impl.h"
#include "gpu/command_buffer/service/path_manager.h"
#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/progress_reporter.h"
#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include "gpu/command_buffer/service/sampler_manager.h"
#include "gpu/command_buffer/service/shader_manager.h"
@@ -65,7 +66,8 @@ ContextGroup::ContextGroup(
framebuffer_completeness_cache,
const scoped_refptr<FeatureInfo>& feature_info,
bool bind_generates_resource,
- gpu::ImageFactory* image_factory)
+ gpu::ImageFactory* image_factory,
+ ProgressReporter* progress_reporter)
: gpu_preferences_(gpu_preferences),
mailbox_manager_(mailbox_manager),
memory_tracker_(memory_tracker),
@@ -103,7 +105,8 @@ ContextGroup::ContextGroup(
program_cache_(NULL),
feature_info_(feature_info),
image_factory_(image_factory),
- passthrough_resources_(new PassthroughResources) {
+ passthrough_resources_(new PassthroughResources),
+ progress_reporter_(progress_reporter) {
{
DCHECK(feature_info_);
if (!mailbox_manager_.get())
@@ -212,7 +215,7 @@ bool ContextGroup::Initialize(GLES2Decoder* decoder,
renderbuffer_manager_.reset(new RenderbufferManager(
memory_tracker_.get(), max_renderbuffer_size, max_samples,
feature_info_.get()));
- shader_manager_.reset(new ShaderManager());
+ shader_manager_.reset(new ShaderManager(progress_reporter_));
sampler_manager_.reset(new SamplerManager(feature_info_.get()));
// Lookup GL things we need to know.
@@ -299,14 +302,11 @@ bool ContextGroup::Initialize(GLES2Decoder* decoder,
feature_info_->workarounds().max_texture_size);
}
- texture_manager_.reset(new TextureManager(memory_tracker_.get(),
- feature_info_.get(),
- max_texture_size,
- max_cube_map_texture_size,
- max_rectangle_texture_size,
- max_3d_texture_size,
- max_array_texture_layers,
- bind_generates_resource_));
+ texture_manager_.reset(new TextureManager(
+ memory_tracker_.get(), feature_info_.get(), max_texture_size,
+ max_cube_map_texture_size, max_rectangle_texture_size,
+ max_3d_texture_size, max_array_texture_layers, bind_generates_resource_,
+ progress_reporter_));
texture_manager_->set_framebuffer_manager(framebuffer_manager_.get());
const GLint kMinTextureImageUnits = 8;
@@ -435,14 +435,10 @@ bool ContextGroup::Initialize(GLES2Decoder* decoder,
path_manager_.reset(new PathManager());
- program_manager_.reset(
- new ProgramManager(program_cache_,
- max_varying_vectors_,
- max_draw_buffers_,
- max_dual_source_draw_buffers_,
- max_vertex_attribs_,
- gpu_preferences_,
- feature_info_.get()));
+ program_manager_.reset(new ProgramManager(
+ program_cache_, max_varying_vectors_, max_draw_buffers_,
+ max_dual_source_draw_buffers_, max_vertex_attribs_, gpu_preferences_,
+ feature_info_.get(), progress_reporter_));
if (!texture_manager_->Initialize()) {
DLOG(ERROR) << "Context::Group::Initialize failed because texture manager "
@@ -481,6 +477,11 @@ bool ContextGroup::HaveContexts() {
return !decoders_.empty();
}
+void ContextGroup::ReportProgress() {
+ if (progress_reporter_)
+ progress_reporter_->ReportProgress();
+}
+
void ContextGroup::Destroy(GLES2Decoder* decoder, bool have_context) {
decoders_.erase(std::remove_if(decoders_.begin(), decoders_.end(),
WeakPtrEquals<gles2::GLES2Decoder>(decoder)),
@@ -496,6 +497,7 @@ void ContextGroup::Destroy(GLES2Decoder* decoder, bool have_context) {
}
buffer_manager_->Destroy();
buffer_manager_.reset();
+ ReportProgress();
}
if (framebuffer_manager_ != NULL) {
@@ -503,42 +505,50 @@ void ContextGroup::Destroy(GLES2Decoder* decoder, bool have_context) {
if (texture_manager_)
texture_manager_->set_framebuffer_manager(NULL);
framebuffer_manager_.reset();
+ ReportProgress();
}
if (renderbuffer_manager_ != NULL) {
renderbuffer_manager_->Destroy(have_context);
renderbuffer_manager_.reset();
+ ReportProgress();
}
if (texture_manager_ != NULL) {
texture_manager_->Destroy(have_context);
texture_manager_.reset();
+ ReportProgress();
}
if (path_manager_ != NULL) {
path_manager_->Destroy(have_context);
path_manager_.reset();
+ ReportProgress();
}
if (program_manager_ != NULL) {
program_manager_->Destroy(have_context);
program_manager_.reset();
+ ReportProgress();
}
if (shader_manager_ != NULL) {
shader_manager_->Destroy(have_context);
shader_manager_.reset();
+ ReportProgress();
}
if (sampler_manager_ != NULL) {
sampler_manager_->Destroy(have_context);
sampler_manager_.reset();
+ ReportProgress();
}
memory_tracker_ = NULL;
passthrough_resources_->Destroy(have_context);
passthrough_resources_.reset();
+ ReportProgress();
danakj 2016/10/06 21:49:54 nit: This one seems unneeded, when you're leaving
danakj 2016/10/06 21:51:01 Or maybe it's worth keeping to chain with other fu
}
uint32_t ContextGroup::GetMemRepresented() const {
« no previous file with comments | « gpu/command_buffer/service/context_group.h ('k') | gpu/command_buffer/service/context_group_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698