// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "cc/raster/tile_task.h" #include #include "base/check.h" #include "base/feature_list.h" #include "cc/base/features.h" namespace cc { TileTask::TileTask( SupportsConcurrentExecution supports_concurrent_execution, SupportsBackgroundThreadPriority supports_background_thread_priority, TileTask::Vector* dependencies) : supports_concurrent_execution_(supports_concurrent_execution), supports_background_thread_priority_(supports_background_thread_priority), dependencies_(dependencies ? std::move(*dependencies) : TileTask::Vector()) {} TileTask::~TileTask() { DCHECK(did_complete_); } void TileTask::DidComplete() { DCHECK(!did_complete_); did_complete_ = true; } bool TileTask::HasCompleted() const { return did_complete_; } bool TileTask::IsRasterTask() const { return true; } bool TileTask::TaskContainsLCPCandidateImages() const { for (auto dependent : dependencies_) { if (!dependent->HasCompleted() && dependent->TaskContainsLCPCandidateImages()) { return true; } } return false; } void TileTask::SetExternalDependent(scoped_refptr dependent) { if (base::FeatureList::IsEnabled(features::kPreventDuplicateImageDecodes)) { CHECK(IsRasterTask() != dependent->IsRasterTask()); // A task may have at most one external dependent. CHECK(!external_dependent_ || external_dependent_->state().IsCanceled()); // A task may have at most one external dependency, and may not mix internal // and external dependencies. CHECK_EQ(dependent->dependencies_.size(), 0u); dependent->dependencies_.push_back(this); external_dependent_ = std::move(dependent); } } void TileTask::ExternalDependencyCompleted() { CHECK_EQ(dependencies_.size(), 1u); dependencies_.clear(); } } // namespace cc