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

Side by Side Diff: cc/resources/resource_provider.cc

Issue 485043003: cc: Use correct message loop proxy in BlockingTaskRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits. Created 6 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
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 raster_bitmap_.reset(); 594 raster_bitmap_.reset();
595 } 595 }
596 596
597 ResourceProvider::Child::Child() : marked_for_deletion(false) {} 597 ResourceProvider::Child::Child() : marked_for_deletion(false) {}
598 598
599 ResourceProvider::Child::~Child() {} 599 ResourceProvider::Child::~Child() {}
600 600
601 scoped_ptr<ResourceProvider> ResourceProvider::Create( 601 scoped_ptr<ResourceProvider> ResourceProvider::Create(
602 OutputSurface* output_surface, 602 OutputSurface* output_surface,
603 SharedBitmapManager* shared_bitmap_manager, 603 SharedBitmapManager* shared_bitmap_manager,
604 BlockingTaskRunner* blocking_main_thread_task_runner,
604 int highp_threshold_min, 605 int highp_threshold_min,
605 bool use_rgba_4444_texture_format, 606 bool use_rgba_4444_texture_format,
606 size_t id_allocation_chunk_size, 607 size_t id_allocation_chunk_size,
607 bool use_distance_field_text) { 608 bool use_distance_field_text) {
608 scoped_ptr<ResourceProvider> resource_provider( 609 scoped_ptr<ResourceProvider> resource_provider(
609 new ResourceProvider(output_surface, 610 new ResourceProvider(output_surface,
610 shared_bitmap_manager, 611 shared_bitmap_manager,
612 blocking_main_thread_task_runner,
611 highp_threshold_min, 613 highp_threshold_min,
612 use_rgba_4444_texture_format, 614 use_rgba_4444_texture_format,
613 id_allocation_chunk_size, 615 id_allocation_chunk_size,
614 use_distance_field_text)); 616 use_distance_field_text));
615 617
616 if (resource_provider->ContextGL()) 618 if (resource_provider->ContextGL())
617 resource_provider->InitializeGL(); 619 resource_provider->InitializeGL();
618 else 620 else
619 resource_provider->InitializeSoftware(); 621 resource_provider->InitializeSoftware();
620 622
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource.gl_id); 772 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource.gl_id);
771 gl->TexImageIOSurface2DCHROMIUM( 773 gl->TexImageIOSurface2DCHROMIUM(
772 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0); 774 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0);
773 resource.allocated = true; 775 resource.allocated = true;
774 resources_[id] = resource; 776 resources_[id] = resource;
775 return id; 777 return id;
776 } 778 }
777 779
778 ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 780 ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
779 const TextureMailbox& mailbox, 781 const TextureMailbox& mailbox,
780 scoped_ptr<SingleReleaseCallback> release_callback) { 782 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
781 DCHECK(thread_checker_.CalledOnValidThread()); 783 DCHECK(thread_checker_.CalledOnValidThread());
782 // Just store the information. Mailbox will be consumed in LockForRead(). 784 // Just store the information. Mailbox will be consumed in LockForRead().
783 ResourceId id = next_id_++; 785 ResourceId id = next_id_++;
784 DCHECK(mailbox.IsValid()); 786 DCHECK(mailbox.IsValid());
785 Resource& resource = resources_[id]; 787 Resource& resource = resources_[id];
786 if (mailbox.IsTexture()) { 788 if (mailbox.IsTexture()) {
787 resource = Resource(0, 789 resource = Resource(0,
788 gfx::Size(), 790 gfx::Size(),
789 Resource::External, 791 Resource::External,
790 mailbox.target(), 792 mailbox.target(),
(...skipping 15 matching lines...) Expand all
806 } 808 }
807 resource = Resource(pixels, 809 resource = Resource(pixels,
808 shared_bitmap.release(), 810 shared_bitmap.release(),
809 mailbox.shared_memory_size(), 811 mailbox.shared_memory_size(),
810 Resource::External, 812 Resource::External,
811 GL_LINEAR, 813 GL_LINEAR,
812 GL_CLAMP_TO_EDGE); 814 GL_CLAMP_TO_EDGE);
813 } 815 }
814 resource.allocated = true; 816 resource.allocated = true;
815 resource.mailbox = mailbox; 817 resource.mailbox = mailbox;
816 resource.release_callback = 818 resource.release_callback_impl =
817 base::Bind(&SingleReleaseCallback::Run, 819 base::Bind(&SingleReleaseCallbackImpl::Run,
818 base::Owned(release_callback.release())); 820 base::Owned(release_callback_impl.release()));
819 resource.allow_overlay = mailbox.allow_overlay(); 821 resource.allow_overlay = mailbox.allow_overlay();
820 return id; 822 return id;
821 } 823 }
822 824
823 void ResourceProvider::DeleteResource(ResourceId id) { 825 void ResourceProvider::DeleteResource(ResourceId id) {
824 DCHECK(thread_checker_.CalledOnValidThread()); 826 DCHECK(thread_checker_.CalledOnValidThread());
825 ResourceMap::iterator it = resources_.find(id); 827 ResourceMap::iterator it = resources_.find(id);
826 CHECK(it != resources_.end()); 828 CHECK(it != resources_.end());
827 Resource* resource = &it->second; 829 Resource* resource = &it->second;
828 DCHECK(!resource->marked_for_deletion); 830 DCHECK(!resource->marked_for_deletion);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 } else { 894 } else {
893 DCHECK(resource->mailbox.IsSharedMemory()); 895 DCHECK(resource->mailbox.IsSharedMemory());
894 base::SharedMemory* shared_memory = resource->mailbox.shared_memory(); 896 base::SharedMemory* shared_memory = resource->mailbox.shared_memory();
895 if (resource->pixels && shared_memory) { 897 if (resource->pixels && shared_memory) {
896 DCHECK(shared_memory->memory() == resource->pixels); 898 DCHECK(shared_memory->memory() == resource->pixels);
897 resource->pixels = NULL; 899 resource->pixels = NULL;
898 delete resource->shared_bitmap; 900 delete resource->shared_bitmap;
899 resource->shared_bitmap = NULL; 901 resource->shared_bitmap = NULL;
900 } 902 }
901 } 903 }
902 resource->release_callback.Run(sync_point, lost_resource); 904 resource->release_callback_impl.Run(
905 sync_point, lost_resource, blocking_main_thread_task_runner_);
903 } 906 }
904 if (resource->gl_id) { 907 if (resource->gl_id) {
905 GLES2Interface* gl = ContextGL(); 908 GLES2Interface* gl = ContextGL();
906 DCHECK(gl); 909 DCHECK(gl);
907 GLC(gl, gl->DeleteTextures(1, &resource->gl_id)); 910 GLC(gl, gl->DeleteTextures(1, &resource->gl_id));
908 resource->gl_id = 0; 911 resource->gl_id = 0;
909 } 912 }
910 if (resource->shared_bitmap) { 913 if (resource->shared_bitmap) {
911 DCHECK(resource->origin != Resource::External); 914 DCHECK(resource->origin != Resource::External);
912 DCHECK_EQ(Bitmap, resource->type); 915 DCHECK_EQ(Bitmap, resource->type);
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 ResourceProvider::PopulateSkBitmapWithResource( 1222 ResourceProvider::PopulateSkBitmapWithResource(
1220 &sk_bitmap_, resource_provider->LockForWrite(resource_id)); 1223 &sk_bitmap_, resource_provider->LockForWrite(resource_id));
1221 DCHECK(valid()); 1224 DCHECK(valid());
1222 sk_canvas_.reset(new SkCanvas(sk_bitmap_)); 1225 sk_canvas_.reset(new SkCanvas(sk_bitmap_));
1223 } 1226 }
1224 1227
1225 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { 1228 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() {
1226 resource_provider_->UnlockForWrite(resource_id_); 1229 resource_provider_->UnlockForWrite(resource_id_);
1227 } 1230 }
1228 1231
1229 ResourceProvider::ResourceProvider(OutputSurface* output_surface, 1232 ResourceProvider::ResourceProvider(
1230 SharedBitmapManager* shared_bitmap_manager, 1233 OutputSurface* output_surface,
1231 int highp_threshold_min, 1234 SharedBitmapManager* shared_bitmap_manager,
1232 bool use_rgba_4444_texture_format, 1235 BlockingTaskRunner* blocking_main_thread_task_runner,
1233 size_t id_allocation_chunk_size, 1236 int highp_threshold_min,
1234 bool use_distance_field_text) 1237 bool use_rgba_4444_texture_format,
1238 size_t id_allocation_chunk_size,
1239 bool use_distance_field_text)
1235 : output_surface_(output_surface), 1240 : output_surface_(output_surface),
1236 shared_bitmap_manager_(shared_bitmap_manager), 1241 shared_bitmap_manager_(shared_bitmap_manager),
1242 blocking_main_thread_task_runner_(blocking_main_thread_task_runner),
1237 lost_output_surface_(false), 1243 lost_output_surface_(false),
1238 highp_threshold_min_(highp_threshold_min), 1244 highp_threshold_min_(highp_threshold_min),
1239 next_id_(1), 1245 next_id_(1),
1240 next_child_(1), 1246 next_child_(1),
1241 default_resource_type_(InvalidType), 1247 default_resource_type_(InvalidType),
1242 use_texture_storage_ext_(false), 1248 use_texture_storage_ext_(false),
1243 use_texture_format_bgra_(false), 1249 use_texture_format_bgra_(false),
1244 use_texture_usage_hint_(false), 1250 use_texture_usage_hint_(false),
1245 use_compressed_texture_etc1_(false), 1251 use_compressed_texture_etc1_(false),
1246 max_texture_size_(0), 1252 max_texture_size_(0),
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 resource.marked_for_deletion = false; 1420 resource.marked_for_deletion = false;
1415 resource.imported_count++; 1421 resource.imported_count++;
1416 continue; 1422 continue;
1417 } 1423 }
1418 1424
1419 if ((!it->is_software && !gl) || 1425 if ((!it->is_software && !gl) ||
1420 (it->is_software && !shared_bitmap_manager_)) { 1426 (it->is_software && !shared_bitmap_manager_)) {
1421 TRACE_EVENT0("cc", "ResourceProvider::ReceiveFromChild dropping invalid"); 1427 TRACE_EVENT0("cc", "ResourceProvider::ReceiveFromChild dropping invalid");
1422 ReturnedResourceArray to_return; 1428 ReturnedResourceArray to_return;
1423 to_return.push_back(it->ToReturnedResource()); 1429 to_return.push_back(it->ToReturnedResource());
1424 child_info.return_callback.Run(to_return); 1430 child_info.return_callback.Run(to_return,
1431 blocking_main_thread_task_runner_);
1425 continue; 1432 continue;
1426 } 1433 }
1427 1434
1428 ResourceId local_id = next_id_++; 1435 ResourceId local_id = next_id_++;
1429 Resource& resource = resources_[local_id]; 1436 Resource& resource = resources_[local_id];
1430 if (it->is_software) { 1437 if (it->is_software) {
1431 resource = Resource(it->mailbox_holder.mailbox, 1438 resource = Resource(it->mailbox_holder.mailbox,
1432 it->size, 1439 it->size,
1433 Resource::Delegated, 1440 Resource::Delegated,
1434 GL_LINEAR, 1441 GL_LINEAR,
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
1729 if (need_sync_point) { 1736 if (need_sync_point) {
1730 DCHECK(gl); 1737 DCHECK(gl);
1731 GLuint sync_point = gl->InsertSyncPointCHROMIUM(); 1738 GLuint sync_point = gl->InsertSyncPointCHROMIUM();
1732 for (size_t i = 0; i < to_return.size(); ++i) { 1739 for (size_t i = 0; i < to_return.size(); ++i) {
1733 if (!to_return[i].sync_point) 1740 if (!to_return[i].sync_point)
1734 to_return[i].sync_point = sync_point; 1741 to_return[i].sync_point = sync_point;
1735 } 1742 }
1736 } 1743 }
1737 1744
1738 if (!to_return.empty()) 1745 if (!to_return.empty())
1739 child_info->return_callback.Run(to_return); 1746 child_info->return_callback.Run(to_return,
1747 blocking_main_thread_task_runner_);
1740 1748
1741 if (child_info->marked_for_deletion && 1749 if (child_info->marked_for_deletion &&
1742 child_info->parent_to_child_map.empty()) { 1750 child_info->parent_to_child_map.empty()) {
1743 DCHECK(child_info->child_to_parent_map.empty()); 1751 DCHECK(child_info->child_to_parent_map.empty());
1744 children_.erase(child_it); 1752 children_.erase(child_it);
1745 } 1753 }
1746 } 1754 }
1747 1755
1748 RasterBuffer* ResourceProvider::AcquireGpuRasterBuffer(ResourceId id) { 1756 RasterBuffer* ResourceProvider::AcquireGpuRasterBuffer(ResourceId id) {
1749 // Resource needs to be locked for write since GpuRasterBuffer writes 1757 // Resource needs to be locked for write since GpuRasterBuffer writes
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
2294 ContextProvider* context_provider = output_surface_->context_provider(); 2302 ContextProvider* context_provider = output_surface_->context_provider();
2295 return context_provider ? context_provider->ContextGL() : NULL; 2303 return context_provider ? context_provider->ContextGL() : NULL;
2296 } 2304 }
2297 2305
2298 class GrContext* ResourceProvider::GrContext() const { 2306 class GrContext* ResourceProvider::GrContext() const {
2299 ContextProvider* context_provider = output_surface_->context_provider(); 2307 ContextProvider* context_provider = output_surface_->context_provider();
2300 return context_provider ? context_provider->GrContext() : NULL; 2308 return context_provider ? context_provider->GrContext() : NULL;
2301 } 2309 }
2302 2310
2303 } // namespace cc 2311 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698