Commit e660f485 authored by Xu Xing's avatar Xu Xing Committed by Commit Bot

[viz] Move promotion hints and misc to Display and LayerTree

batched_returning_resources_, wants_promotion_hints_set_ to Display.
IsLost, LoseResourceForTesting, EnableReadLockFencesForTesting to LayerTree.

BUG=738190

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I01fce2d63aee57eccaced8a596869fa380f69bf7
Reviewed-on: https://chromium-review.googlesource.com/870173
Commit-Queue: Xing Xu <xing.xu@intel.com>
Reviewed-by: default avatardanakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#530398}
parent 19446194
......@@ -91,6 +91,15 @@ void DisplayResourceProvider::SendPromotionHints(
}
}
void DisplayResourceProvider::DeletePromotionHint(ResourceMap::iterator it,
DeleteStyle style) {
viz::internal::Resource* resource = &it->second;
// If this resource was interested in promotion hints, then remove it from
// the set of resources that we'll notify.
if (resource->wants_promotion_hint)
wants_promotion_hints_set_.erase(it->first);
}
bool DisplayResourceProvider::IsBackedBySurfaceTexture(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
return resource->is_backed_by_surface_texture;
......@@ -293,6 +302,9 @@ void DisplayResourceProvider::DeleteAndReturnUnusedResourcesToChild(
child_info->child_to_parent_map.erase(child_id);
resource.imported_count = 0;
#if defined(OS_ANDROID)
DeletePromotionHint(it, style);
#endif
DeleteResourceInternal(it, style);
}
......@@ -555,6 +567,9 @@ void DisplayResourceProvider::UnlockForRead(viz::ResourceId id) {
if (resource->marked_for_deletion && !resource->lock_for_read_count) {
if (!resource->child_id) {
// The resource belongs to this ResourceProvider, so it can be destroyed.
#if defined(OS_ANDROID)
DeletePromotionHint(it, NORMAL);
#endif
DeleteResourceInternal(it, NORMAL);
} else {
if (batch_return_resources_) {
......
......@@ -238,6 +238,9 @@ class CC_EXPORT DisplayResourceProvider : public ResourceProvider {
const viz::internal::Resource* LockForRead(viz::ResourceId id);
void UnlockForRead(viz::ResourceId id);
bool ReadLockFenceHasPassed(const viz::internal::Resource* resource);
#if defined(OS_ANDROID)
void DeletePromotionHint(ResourceMap::iterator it, DeleteStyle style);
#endif
struct Child {
Child();
......@@ -260,9 +263,20 @@ class CC_EXPORT DisplayResourceProvider : public ResourceProvider {
scoped_refptr<viz::ResourceFence> current_read_lock_fence_;
ChildMap children_;
// Used as child id when creating a child.
int next_child_ = 1;
base::flat_map<viz::ResourceId, sk_sp<SkImage>> resource_sk_image_;
viz::ResourceId next_id_;
viz::SharedBitmapManager* shared_bitmap_manager_;
// Keep track of whether deleted resources should be batched up or returned
// immediately.
bool batch_return_resources_ = false;
// Maps from a child id to the set of resources to be returned to it.
base::small_map<std::map<int, ResourceIdArray>> batched_returning_resources_;
#if defined(OS_ANDROID)
// Set of ResourceIds that would like to be notified about promotion hints.
viz::ResourceIdSet wants_promotion_hints_set_;
#endif
DISALLOW_COPY_AND_ASSIGN(DisplayResourceProvider);
};
......
......@@ -818,6 +818,24 @@ viz::ResourceFormat LayerTreeResourceProvider::YuvResourceFormat(
}
}
bool LayerTreeResourceProvider::IsLost(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
return resource->lost;
}
void LayerTreeResourceProvider::LoseResourceForTesting(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
DCHECK(resource);
resource->lost = true;
}
void LayerTreeResourceProvider::EnableReadLockFencesForTesting(
viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
DCHECK(resource);
resource->read_lock_fences_enabled = true;
}
LayerTreeResourceProvider::ScopedWriteLockGpu::ScopedWriteLockGpu(
LayerTreeResourceProvider* resource_provider,
viz::ResourceId resource_id)
......
......@@ -144,6 +144,11 @@ class CC_EXPORT LayerTreeResourceProvider : public ResourceProvider {
return gpu_memory_buffer_manager_;
}
bool IsLost(viz::ResourceId id);
void LoseResourceForTesting(viz::ResourceId id);
void EnableReadLockFencesForTesting(viz::ResourceId id);
// The following lock classes are part of the ResourceProvider API and are
// needed to read and write the resource contents. The user must ensure
// that they only use GL locks on GL resources, etc, and this is enforced
......
......@@ -53,7 +53,6 @@ base::AtomicSequenceNumber g_next_resource_provider_tracing_id;
ResourceProvider::ResourceProvider(
viz::ContextProvider* compositor_context_provider)
: compositor_context_provider_(compositor_context_provider),
next_child_(1),
lost_context_provider_(false),
tracing_id_(g_next_resource_provider_tracing_id.GetNext()) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
......@@ -87,30 +86,12 @@ ResourceProvider::~ResourceProvider() {
#endif // DCHECK_IS_ON()
}
bool ResourceProvider::IsLost(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
return resource->lost;
}
void ResourceProvider::LoseResourceForTesting(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
DCHECK(resource);
resource->lost = true;
}
void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it,
DeleteStyle style) {
TRACE_EVENT0("cc", "ResourceProvider::DeleteResourceInternal");
viz::internal::Resource* resource = &it->second;
DCHECK(resource->exported_count == 0 || style != NORMAL);
#if defined(OS_ANDROID)
// If this resource was interested in promotion hints, then remove it from
// the set of resources that we'll notify.
if (resource->wants_promotion_hint)
wants_promotion_hints_set_.erase(it->first);
#endif
// Exported resources are lost on shutdown.
bool exported_resource_lost =
style == FOR_SHUTDOWN && resource->exported_count > 0;
......@@ -174,12 +155,6 @@ viz::internal::Resource* ResourceProvider::GetResource(viz::ResourceId id) {
return &it->second;
}
void ResourceProvider::EnableReadLockFencesForTesting(viz::ResourceId id) {
viz::internal::Resource* resource = GetResource(id);
DCHECK(resource);
resource->read_lock_fences_enabled = true;
}
void ResourceProvider::PopulateSkBitmapWithResource(
SkBitmap* sk_bitmap,
const viz::internal::Resource* resource) {
......@@ -209,10 +184,6 @@ GLES2Interface* ResourceProvider::ContextGL() const {
return context_provider ? context_provider->ContextGL() : nullptr;
}
bool ResourceProvider::IsGLContextLost() const {
return ContextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
}
bool ResourceProvider::OnMemoryDump(
const base::trace_event::MemoryDumpArgs& args,
base::trace_event::ProcessMemoryDump* pmd) {
......
......@@ -70,19 +70,12 @@ class CC_EXPORT ResourceProvider
explicit ResourceProvider(viz::ContextProvider* compositor_context_provider);
~ResourceProvider() override;
void Initialize();
bool IsSoftware() const { return !compositor_context_provider_; }
void DidLoseContextProvider() { lost_context_provider_ = true; }
size_t num_resources() const { return resources_.size(); }
bool IsLost(viz::ResourceId id);
void LoseResourceForTesting(viz::ResourceId id);
void EnableReadLockFencesForTesting(viz::ResourceId id);
GLenum GetResourceTextureTarget(viz::ResourceId id);
// base::trace_event::MemoryDumpProvider implementation.
......@@ -116,27 +109,13 @@ class CC_EXPORT ResourceProvider
ResourceMap resources_;
// Keep track of whether deleted resources should be batched up or returned
// immediately.
bool batch_return_resources_ = false;
// Maps from a child id to the set of resources to be returned to it.
base::small_map<std::map<int, ResourceIdArray>> batched_returning_resources_;
viz::ContextProvider* compositor_context_provider_;
int next_child_;
bool lost_context_provider_;
THREAD_CHECKER(thread_checker_);
#if defined(OS_ANDROID)
// Set of resource Ids that would like to be notified about promotion hints.
viz::ResourceIdSet wants_promotion_hints_set_;
#endif
private:
bool IsGLContextLost() const;
// A process-unique ID used for disambiguating memory dumps from different
// resource providers.
int tracing_id_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment