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

Side by Side Diff: gpu/command_buffer/service/texture_manager.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 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/command_buffer/service/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 #include <set> 11 #include <set>
12 #include <utility> 12 #include <utility>
13 13
14 #include "base/bits.h" 14 #include "base/bits.h"
15 #include "base/format_macros.h" 15 #include "base/format_macros.h"
16 #include "base/lazy_instance.h" 16 #include "base/lazy_instance.h"
17 #include "base/metrics/histogram_macros.h" 17 #include "base/metrics/histogram_macros.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
20 #include "base/trace_event/memory_dump_manager.h" 20 #include "base/trace_event/memory_dump_manager.h"
21 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 21 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
22 #include "gpu/command_buffer/service/context_state.h" 22 #include "gpu/command_buffer/service/context_state.h"
23 #include "gpu/command_buffer/service/error_state.h" 23 #include "gpu/command_buffer/service/error_state.h"
24 #include "gpu/command_buffer/service/feature_info.h" 24 #include "gpu/command_buffer/service/feature_info.h"
25 #include "gpu/command_buffer/service/framebuffer_manager.h" 25 #include "gpu/command_buffer/service/framebuffer_manager.h"
26 #include "gpu/command_buffer/service/gl_stream_texture_image.h" 26 #include "gpu/command_buffer/service/gl_stream_texture_image.h"
27 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 27 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
28 #include "gpu/command_buffer/service/mailbox_manager.h" 28 #include "gpu/command_buffer/service/mailbox_manager.h"
29 #include "gpu/command_buffer/service/memory_tracking.h" 29 #include "gpu/command_buffer/service/memory_tracking.h"
30 #include "gpu/command_buffer/service/progress_reporter.h"
30 #include "ui/gl/gl_context.h" 31 #include "ui/gl/gl_context.h"
31 #include "ui/gl/gl_implementation.h" 32 #include "ui/gl/gl_implementation.h"
32 #include "ui/gl/gl_state_restorer.h" 33 #include "ui/gl/gl_state_restorer.h"
33 #include "ui/gl/gl_version_info.h" 34 #include "ui/gl/gl_version_info.h"
34 #include "ui/gl/trace_util.h" 35 #include "ui/gl/trace_util.h"
35 36
36 namespace gpu { 37 namespace gpu {
37 namespace gles2 { 38 namespace gles2 {
38 39
39 namespace { 40 namespace {
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 DCHECK_EQ(0, num_unsafe_textures_); 355 DCHECK_EQ(0, num_unsafe_textures_);
355 DCHECK_EQ(0, num_uncleared_mips_); 356 DCHECK_EQ(0, num_uncleared_mips_);
356 DCHECK_EQ(0, num_images_); 357 DCHECK_EQ(0, num_images_);
357 358
358 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 359 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
359 this); 360 this);
360 } 361 }
361 362
362 void TextureManager::Destroy(bool have_context) { 363 void TextureManager::Destroy(bool have_context) {
363 have_context_ = have_context; 364 have_context_ = have_context;
364 textures_.clear(); 365
366 while (!textures_.empty()) {
367 textures_.erase(textures_.begin());
368 if (progress_reporter_)
369 progress_reporter_->ReportProgress();
370 }
365 for (int ii = 0; ii < kNumDefaultTextures; ++ii) { 371 for (int ii = 0; ii < kNumDefaultTextures; ++ii) {
366 default_textures_[ii] = NULL; 372 default_textures_[ii] = NULL;
373 if (progress_reporter_)
374 progress_reporter_->ReportProgress();
367 } 375 }
368 376
369 if (have_context) { 377 if (have_context) {
370 glDeleteTextures(arraysize(black_texture_ids_), black_texture_ids_); 378 glDeleteTextures(arraysize(black_texture_ids_), black_texture_ids_);
371 } 379 }
372 380
373 DCHECK_EQ(0u, memory_type_tracker_->GetMemRepresented()); 381 DCHECK_EQ(0u, memory_type_tracker_->GetMemRepresented());
374 } 382 }
375 383
376 TextureBase::TextureBase(GLuint service_id) 384 TextureBase::TextureBase(GLuint service_id)
(...skipping 1402 matching lines...) Expand 10 before | Expand all | Expand 10 after
1779 force_context_lost_ = true; 1787 force_context_lost_ = true;
1780 } 1788 }
1781 1789
1782 TextureManager::TextureManager(MemoryTracker* memory_tracker, 1790 TextureManager::TextureManager(MemoryTracker* memory_tracker,
1783 FeatureInfo* feature_info, 1791 FeatureInfo* feature_info,
1784 GLint max_texture_size, 1792 GLint max_texture_size,
1785 GLint max_cube_map_texture_size, 1793 GLint max_cube_map_texture_size,
1786 GLint max_rectangle_texture_size, 1794 GLint max_rectangle_texture_size,
1787 GLint max_3d_texture_size, 1795 GLint max_3d_texture_size,
1788 GLint max_array_texture_layers, 1796 GLint max_array_texture_layers,
1789 bool use_default_textures) 1797 bool use_default_textures,
1798 ProgressReporter* progress_reporter)
1790 : memory_type_tracker_(new MemoryTypeTracker(memory_tracker)), 1799 : memory_type_tracker_(new MemoryTypeTracker(memory_tracker)),
1791 memory_tracker_(memory_tracker), 1800 memory_tracker_(memory_tracker),
1792 feature_info_(feature_info), 1801 feature_info_(feature_info),
1793 framebuffer_manager_(NULL), 1802 framebuffer_manager_(NULL),
1794 max_texture_size_(max_texture_size), 1803 max_texture_size_(max_texture_size),
1795 max_cube_map_texture_size_(max_cube_map_texture_size), 1804 max_cube_map_texture_size_(max_cube_map_texture_size),
1796 max_rectangle_texture_size_(max_rectangle_texture_size), 1805 max_rectangle_texture_size_(max_rectangle_texture_size),
1797 max_3d_texture_size_(max_3d_texture_size), 1806 max_3d_texture_size_(max_3d_texture_size),
1798 max_array_texture_layers_(max_array_texture_layers), 1807 max_array_texture_layers_(max_array_texture_layers),
1799 max_levels_(ComputeMipMapCount(GL_TEXTURE_2D, 1808 max_levels_(ComputeMipMapCount(GL_TEXTURE_2D,
1800 max_texture_size, 1809 max_texture_size,
1801 max_texture_size, 1810 max_texture_size,
1802 0)), 1811 0)),
1803 max_cube_map_levels_(ComputeMipMapCount(GL_TEXTURE_CUBE_MAP, 1812 max_cube_map_levels_(ComputeMipMapCount(GL_TEXTURE_CUBE_MAP,
1804 max_cube_map_texture_size, 1813 max_cube_map_texture_size,
1805 max_cube_map_texture_size, 1814 max_cube_map_texture_size,
1806 0)), 1815 0)),
1807 max_3d_levels_(ComputeMipMapCount(GL_TEXTURE_3D, 1816 max_3d_levels_(ComputeMipMapCount(GL_TEXTURE_3D,
1808 max_3d_texture_size, 1817 max_3d_texture_size,
1809 max_3d_texture_size, 1818 max_3d_texture_size,
1810 max_3d_texture_size)), 1819 max_3d_texture_size)),
1811 use_default_textures_(use_default_textures), 1820 use_default_textures_(use_default_textures),
1812 num_unsafe_textures_(0), 1821 num_unsafe_textures_(0),
1813 num_uncleared_mips_(0), 1822 num_uncleared_mips_(0),
1814 num_images_(0), 1823 num_images_(0),
1815 texture_count_(0), 1824 texture_count_(0),
1816 have_context_(true), 1825 have_context_(true),
1817 current_service_id_generation_(0) { 1826 current_service_id_generation_(0),
1827 progress_reporter_(progress_reporter) {
1818 for (int ii = 0; ii < kNumDefaultTextures; ++ii) { 1828 for (int ii = 0; ii < kNumDefaultTextures; ++ii) {
1819 black_texture_ids_[ii] = 0; 1829 black_texture_ids_[ii] = 0;
1820 } 1830 }
1821 } 1831 }
1822 1832
1823 bool TextureManager::Initialize() { 1833 bool TextureManager::Initialize() {
1824 // Reset PIXEL_UNPACK_BUFFER to avoid unrelated GL error on some GL drivers. 1834 // Reset PIXEL_UNPACK_BUFFER to avoid unrelated GL error on some GL drivers.
1825 if (feature_info_->gl_version_info().is_es3_capable) { 1835 if (feature_info_->gl_version_info().is_es3_capable) {
1826 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); 1836 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
1827 } 1837 }
(...skipping 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after
3467 uint32_t TextureManager::GetServiceIdGeneration() const { 3477 uint32_t TextureManager::GetServiceIdGeneration() const {
3468 return current_service_id_generation_; 3478 return current_service_id_generation_;
3469 } 3479 }
3470 3480
3471 void TextureManager::IncrementServiceIdGeneration() { 3481 void TextureManager::IncrementServiceIdGeneration() {
3472 current_service_id_generation_++; 3482 current_service_id_generation_++;
3473 } 3483 }
3474 3484
3475 } // namespace gles2 3485 } // namespace gles2
3476 } // namespace gpu 3486 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698