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

Unified Diff: cc/tiles/tile_manager.cc

Issue 1866043006: cc: Remove ScheduleOnOriginThread() and CompleteOnOriginThread(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wip Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: cc/tiles/tile_manager.cc
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index 68408e4ded02b983d804ccd6e9f0bfea2b3a7abc..124d64cd63a79fc58fc149b5d3ba2a95dd68ffe6 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -43,7 +43,7 @@ DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER(
class RasterTaskImpl : public RasterTask {
public:
- RasterTaskImpl(const Resource* resource,
+ RasterTaskImpl(Resource* resource,
scoped_refptr<RasterSource> raster_source,
const gfx::Rect& content_rect,
const gfx::Rect& invalid_content_rect,
@@ -57,7 +57,7 @@ class RasterTaskImpl : public RasterTask {
uint64_t previous_content_id,
uint64_t resource_content_id,
int source_frame_number,
- const base::Callback<void(bool)>& reply,
+ scoped_ptr<RasterBuffer> raster_buffer,
ImageDecodeTask::Vector* dependencies)
: RasterTask(dependencies),
resource_(resource),
@@ -74,7 +74,7 @@ class RasterTaskImpl : public RasterTask {
previous_content_id_(previous_content_id),
resource_content_id_(resource_content_id),
source_frame_number_(source_frame_number),
- reply_(reply) {}
+ raster_buffer_(std::move(raster_buffer)) {}
// Overridden from Task:
void RunOnWorkerThread() override {
@@ -96,22 +96,11 @@ class RasterTaskImpl : public RasterTask {
contents_scale_, playback_settings_);
}
- // Overridden from TileTask:
- void ScheduleOnOriginThread(TileTaskClient* client) override {
- DCHECK(!raster_buffer_);
- raster_buffer_ = client->AcquireBufferForRaster(
- resource_, resource_content_id_, previous_content_id_);
- }
- void CompleteOnOriginThread(TileTaskClient* client) override {
- client->ReleaseBufferForRaster(std::move(raster_buffer_));
- reply_.Run(!HasFinishedRunning());
- }
-
protected:
- ~RasterTaskImpl() override { DCHECK(!raster_buffer_); }
+ ~RasterTaskImpl() override {}
- private:
- const Resource* resource_;
+ public:
+ Resource* resource_;
scoped_refptr<RasterSource> raster_source_;
gfx::Rect content_rect_;
gfx::Rect invalid_content_rect_;
@@ -125,9 +114,9 @@ class RasterTaskImpl : public RasterTask {
uint64_t previous_content_id_;
uint64_t resource_content_id_;
int source_frame_number_;
- const base::Callback<void(bool)> reply_;
scoped_ptr<RasterBuffer> raster_buffer_;
+ private:
DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl);
};
@@ -187,7 +176,6 @@ void InsertNodesForRasterTask(TaskGraph* graph,
// Skip if already decoded.
if (decode_task->HasCompleted())
continue;
-
dependencies++;
// Add decode task if it doesn't already exists in graph.
@@ -232,10 +220,6 @@ class TaskSetFinishedTaskImpl : public TileTask {
TaskSetFinished();
}
- // Overridden from TileTask:
- void ScheduleOnOriginThread(TileTaskClient* client) override {}
- void CompleteOnOriginThread(TileTaskClient* client) override {}
-
protected:
~TaskSetFinishedTaskImpl() override {}
@@ -323,7 +307,7 @@ void TileManager::FinishTasksAndCleanUp() {
// |orphan_tasks_|.
orphan_tasks_.clear();
- tile_task_runner_->CheckForCompletedTasks();
+ CheckForCompletedTasks();
FreeResourcesForReleasedTiles();
CleanUpReleasedTiles();
@@ -436,7 +420,7 @@ bool TileManager::PrepareTiles(
// We need to call CheckForCompletedTasks() once in-between each call
// to ScheduleTasks() to prevent canceled tasks from being scheduled.
if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
- tile_task_runner_->CheckForCompletedTasks();
+ CheckForCompletedTasks();
did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
}
@@ -473,7 +457,7 @@ void TileManager::Flush() {
return;
}
- tile_task_runner_->CheckForCompletedTasks();
+ CheckForCompletedTasks();
did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
@@ -757,8 +741,10 @@ void TileManager::ScheduleTasks(
DCHECK(tile->draw_info().requires_resource());
DCHECK(!tile->draw_info().resource_);
- if (!tile->raster_task_)
+ if (!tile->raster_task_) {
tile->raster_task_ = CreateRasterTask(prioritized_tile);
+ raster_tasks_.push_back(tile->raster_task_);
+ }
RasterTask* task = tile->raster_task_.get();
DCHECK(!task->HasCompleted());
@@ -829,7 +815,6 @@ void TileManager::ScheduleTasks(
scoped_refptr<RasterTask> TileManager::CreateRasterTask(
const PrioritizedTile& prioritized_tile) {
Tile* tile = prioritized_tile.tile();
-
// Get the resource.
uint64_t resource_content_id = 0;
Resource* resource = nullptr;
@@ -878,22 +863,42 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(
it = images.erase(it);
}
+ scoped_ptr<RasterBuffer> raster_buffer =
+ tile_task_runner_->AsTileTaskClient()->AcquireBufferForRaster(
+ resource, resource_content_id, tile->invalidated_id());
return make_scoped_refptr(new RasterTaskImpl(
resource, prioritized_tile.raster_source(), tile->content_rect(),
tile->invalidated_content_rect(), tile->contents_scale(),
playback_settings, prioritized_tile.priority().resolution,
tile->layer_id(), prepare_tiles_count_, static_cast<const void*>(tile),
tile->id(), tile->invalidated_id(), resource_content_id,
- tile->source_frame_number(),
- base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this),
- tile->id(), resource),
- &decode_tasks));
+ tile->source_frame_number(), std::move(raster_buffer), &decode_tasks));
+}
+
+void TileManager::CheckForCompletedTasks() {
+ Task::Vector completed_tasks;
+ tile_task_runner_->CollectCompletedTasks(&completed_tasks);
+
+ for (auto task : completed_tasks) {
vmpstr 2016/04/08 18:59:16 auto& task? or auto* task? depending on what compl
+ Task::Vector::iterator it =
+ std::find(raster_tasks_.begin(), raster_tasks_.end(), task);
vmpstr 2016/04/08 18:59:16 This is a n^2 loop... how's the performance here i
+ if (it != raster_tasks_.end()) {
+ raster_tasks_.erase(it);
+ RasterTaskImpl* raster_task = static_cast<RasterTaskImpl*>(task.get());
+ DCHECK(raster_task);
+ CompleteRasterTask(raster_task->new_content_id_, raster_task->resource_,
+ !raster_task->HasFinishedRunning());
+ }
+
+ static_cast<TileTask*>(task.get())->DidComplete();
+ }
+
+ completed_tasks.clear();
}
-void TileManager::OnRasterTaskCompleted(
- Tile::Id tile_id,
- Resource* resource,
- bool was_canceled) {
+void TileManager::CompleteRasterTask(Tile::Id tile_id,
+ Resource* resource,
+ bool was_canceled) {
DCHECK(tiles_.find(tile_id) != tiles_.end());
Tile* tile = tiles_[tile_id];
@@ -991,7 +996,7 @@ bool TileManager::IsReadyToDraw() const {
void TileManager::CheckAndIssueSignals() {
TRACE_EVENT0("cc", "TileManager::CheckAndIssueSignals");
- tile_task_runner_->CheckForCompletedTasks();
+ CheckForCompletedTasks();
did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
// Ready to activate.
@@ -1031,7 +1036,7 @@ void TileManager::CheckAndIssueSignals() {
}
void TileManager::CheckIfMoreTilesNeedToBePrepared() {
- tile_task_runner_->CheckForCompletedTasks();
+ CheckForCompletedTasks();
did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
// When OOM, keep re-assigning memory until we reach a steady state

Powered by Google App Engine
This is Rietveld 408576698