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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc

Issue 2420303002: Remove usage of FOR_EACH_OBSERVER macro in platform/scheduler (Closed)
Patch Set: 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
« no previous file with comments | « third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "platform/scheduler/base/task_queue_manager.h" 5 #include "platform/scheduler/base/task_queue_manager.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 case ProcessTaskResult::EXECUTED: 254 case ProcessTaskResult::EXECUTED:
255 break; 255 break;
256 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED: 256 case ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED:
257 return; // The TaskQueueManager got deleted, we must bail out. 257 return; // The TaskQueueManager got deleted, we must bail out.
258 } 258 }
259 259
260 lazy_now = real_time_domain()->CreateLazyNow(); 260 lazy_now = real_time_domain()->CreateLazyNow();
261 if (!delegate_->IsNested() && task_start_time != base::TimeTicks()) { 261 if (!delegate_->IsNested() && task_start_time != base::TimeTicks()) {
262 // Only report top level task durations. 262 // Only report top level task durations.
263 base::TimeTicks task_end_time = lazy_now.Now(); 263 base::TimeTicks task_end_time = lazy_now.Now();
264 FOR_EACH_OBSERVER( 264 for (auto& observer : task_time_observers_) {
265 TaskTimeObserver, task_time_observers_, 265 observer.ReportTaskTime(task_queue,
266 ReportTaskTime(task_queue, MonotonicTimeInSeconds(task_start_time), 266 MonotonicTimeInSeconds(task_start_time),
267 MonotonicTimeInSeconds(task_end_time))); 267 MonotonicTimeInSeconds(task_end_time));
268 }
268 task_start_time = task_end_time; 269 task_start_time = task_end_time;
269 } 270 }
270 271
271 work_queue = nullptr; // The queue may have been unregistered. 272 work_queue = nullptr; // The queue may have been unregistered.
272 273
273 UpdateWorkQueues(lazy_now); 274 UpdateWorkQueues(lazy_now);
274 275
275 // Only run a single task per batch in nested run loops so that we can 276 // Only run a single task per batch in nested run loops so that we can
276 // properly exit the nested loop when someone calls RunLoop::Quit(). 277 // properly exit the nested loop when someone calls RunLoop::Quit().
277 if (delegate_->IsNested()) 278 if (delegate_->IsNested())
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 pending_task.posted_from, 336 pending_task.posted_from,
336 UnsafeConvertOnceClosureToRepeating(std::move(pending_task.task))); 337 UnsafeConvertOnceClosureToRepeating(std::move(pending_task.task)));
337 return ProcessTaskResult::DEFERRED; 338 return ProcessTaskResult::DEFERRED;
338 } 339 }
339 340
340 MaybeRecordTaskDelayHistograms(pending_task, queue); 341 MaybeRecordTaskDelayHistograms(pending_task, queue);
341 342
342 TRACE_TASK_EXECUTION("TaskQueueManager::ProcessTaskFromWorkQueue", 343 TRACE_TASK_EXECUTION("TaskQueueManager::ProcessTaskFromWorkQueue",
343 pending_task); 344 pending_task);
344 if (queue->GetShouldNotifyObservers()) { 345 if (queue->GetShouldNotifyObservers()) {
345 FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_, 346 for (auto& observer : task_observers_)
346 WillProcessTask(pending_task)); 347 observer.WillProcessTask(pending_task);
347 queue->NotifyWillProcessTask(pending_task); 348 queue->NotifyWillProcessTask(pending_task);
348 } 349 }
349 TRACE_EVENT1(tracing_category_, "TaskQueueManager::RunTask", "queue", 350 TRACE_EVENT1(tracing_category_, "TaskQueueManager::RunTask", "queue",
350 queue->GetName()); 351 queue->GetName());
351 // NOTE when TaskQueues get unregistered a reference ends up getting retained 352 // NOTE when TaskQueues get unregistered a reference ends up getting retained
352 // by |queues_to_delete_| which is cleared at the top of |DoWork|. This means 353 // by |queues_to_delete_| which is cleared at the top of |DoWork|. This means
353 // we are OK to use raw pointers here. 354 // we are OK to use raw pointers here.
354 internal::TaskQueueImpl* prev_executing_task_queue = 355 internal::TaskQueueImpl* prev_executing_task_queue =
355 currently_executing_task_queue_; 356 currently_executing_task_queue_;
356 currently_executing_task_queue_ = queue; 357 currently_executing_task_queue_ = queue;
357 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task); 358 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task);
358 // Detect if the TaskQueueManager just got deleted. If this happens we must 359 // Detect if the TaskQueueManager just got deleted. If this happens we must
359 // not access any member variables after this point. 360 // not access any member variables after this point.
360 if (protect->HasOneRef()) 361 if (protect->HasOneRef())
361 return ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED; 362 return ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED;
362 363
363 currently_executing_task_queue_ = prev_executing_task_queue; 364 currently_executing_task_queue_ = prev_executing_task_queue;
364 365
365 if (queue->GetShouldNotifyObservers()) { 366 if (queue->GetShouldNotifyObservers()) {
366 FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_, 367 for (auto& observer : task_observers_)
367 DidProcessTask(pending_task)); 368 observer.DidProcessTask(pending_task);
368 queue->NotifyDidProcessTask(pending_task); 369 queue->NotifyDidProcessTask(pending_task);
369 } 370 }
370 371
371 return ProcessTaskResult::EXECUTED; 372 return ProcessTaskResult::EXECUTED;
372 } 373 }
373 374
374 void TaskQueueManager::MaybeRecordTaskDelayHistograms( 375 void TaskQueueManager::MaybeRecordTaskDelayHistograms(
375 const internal::TaskQueueImpl::Task& pending_task, 376 const internal::TaskQueueImpl::Task& pending_task,
376 const internal::TaskQueueImpl* queue) { 377 const internal::TaskQueueImpl* queue) {
377 if ((task_count_++ % kRecordRecordTaskDelayHistogramsEveryNTasks) != 0) 378 if ((task_count_++ % kRecordRecordTaskDelayHistogramsEveryNTasks) != 0)
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 DCHECK(main_thread_checker_.CalledOnValidThread()); 479 DCHECK(main_thread_checker_.CalledOnValidThread());
479 DCHECK(!work_queue->Empty()); 480 DCHECK(!work_queue->Empty());
480 if (observer_) { 481 if (observer_) {
481 observer_->OnTriedToExecuteBlockedTask(*work_queue->task_queue(), 482 observer_->OnTriedToExecuteBlockedTask(*work_queue->task_queue(),
482 *work_queue->GetFrontTask()); 483 *work_queue->GetFrontTask());
483 } 484 }
484 } 485 }
485 486
486 } // namespace scheduler 487 } // namespace scheduler
487 } // namespace blink 488 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/scheduler/base/task_queue_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698