Chromium Code Reviews| 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 { |