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

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

Issue 2486673007: Revert of Add crash keys to TaskQueueManager::ProcessTaskFromWorkQueue (Closed)
Patch Set: Created 4 years, 1 month 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
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"
11 #include "base/debug/crash_logging.h"
12 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
13 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
14 #include "platform/scheduler/base/real_time_domain.h" 13 #include "platform/scheduler/base/real_time_domain.h"
15 #include "platform/scheduler/base/task_queue_impl.h" 14 #include "platform/scheduler/base/task_queue_impl.h"
16 #include "platform/scheduler/base/task_queue_manager_delegate.h" 15 #include "platform/scheduler/base/task_queue_manager_delegate.h"
17 #include "platform/scheduler/base/task_queue_selector.h" 16 #include "platform/scheduler/base/task_queue_selector.h"
18 #include "platform/scheduler/base/work_queue.h" 17 #include "platform/scheduler/base/work_queue.h"
19 #include "platform/scheduler/base/work_queue_sets.h" 18 #include "platform/scheduler/base/work_queue_sets.h"
20 #include "public/platform/scheduler/base/task_time_observer.h" 19 #include "public/platform/scheduler/base/task_time_observer.h"
21 20
(...skipping 26 matching lines...) Expand all
48 base::OnceClosure cb) { 47 base::OnceClosure cb) {
49 return base::BindRepeating([](base::OnceClosure cb) { std::move(cb).Run(); }, 48 return base::BindRepeating([](base::OnceClosure cb) { std::move(cb).Run(); },
50 base::Passed(&cb)); 49 base::Passed(&cb));
51 } 50 }
52 } 51 }
53 52
54 TaskQueueManager::TaskQueueManager( 53 TaskQueueManager::TaskQueueManager(
55 scoped_refptr<TaskQueueManagerDelegate> delegate, 54 scoped_refptr<TaskQueueManagerDelegate> delegate,
56 const char* tracing_category, 55 const char* tracing_category,
57 const char* disabled_by_default_tracing_category, 56 const char* disabled_by_default_tracing_category,
58 const char* disabled_by_default_verbose_tracing_category, 57 const char* disabled_by_default_verbose_tracing_category)
59 bool set_crash_keys)
60 : real_time_domain_(new RealTimeDomain(tracing_category)), 58 : real_time_domain_(new RealTimeDomain(tracing_category)),
61 delegate_(delegate), 59 delegate_(delegate),
62 task_was_run_on_quiescence_monitored_queue_(false), 60 task_was_run_on_quiescence_monitored_queue_(false),
63 other_thread_pending_wakeup_(false), 61 other_thread_pending_wakeup_(false),
64 set_crash_keys_(set_crash_keys),
65 work_batch_size_(1), 62 work_batch_size_(1),
66 task_count_(0), 63 task_count_(0),
67 tracing_category_(tracing_category), 64 tracing_category_(tracing_category),
68 disabled_by_default_tracing_category_( 65 disabled_by_default_tracing_category_(
69 disabled_by_default_tracing_category), 66 disabled_by_default_tracing_category),
70 disabled_by_default_verbose_tracing_category_( 67 disabled_by_default_verbose_tracing_category_(
71 disabled_by_default_verbose_tracing_category), 68 disabled_by_default_verbose_tracing_category),
72 currently_executing_task_queue_(nullptr), 69 currently_executing_task_queue_(nullptr),
73 observer_(nullptr), 70 observer_(nullptr),
74 deletion_sentinel_(new DeletionSentinel()), 71 deletion_sentinel_(new DeletionSentinel()),
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 task_annotator_.DidQueueTask("TaskQueueManager::PostTask", pending_task); 310 task_annotator_.DidQueueTask("TaskQueueManager::PostTask", pending_task);
314 } 311 }
315 312
316 TaskQueueManager::ProcessTaskResult TaskQueueManager::ProcessTaskFromWorkQueue( 313 TaskQueueManager::ProcessTaskResult TaskQueueManager::ProcessTaskFromWorkQueue(
317 internal::WorkQueue* work_queue) { 314 internal::WorkQueue* work_queue) {
318 DCHECK(main_thread_checker_.CalledOnValidThread()); 315 DCHECK(main_thread_checker_.CalledOnValidThread());
319 scoped_refptr<DeletionSentinel> protect(deletion_sentinel_); 316 scoped_refptr<DeletionSentinel> protect(deletion_sentinel_);
320 internal::TaskQueueImpl::Task pending_task = 317 internal::TaskQueueImpl::Task pending_task =
321 work_queue->TakeTaskFromWorkQueue(); 318 work_queue->TakeTaskFromWorkQueue();
322 319
323 // Temporary for https://crbug.com/660427
324 CHECK(!pending_task.task.is_null()) << "Posted from "
325 << pending_task.posted_from.ToString();
326
327 // It's possible the task was canceled, if so bail out. 320 // It's possible the task was canceled, if so bail out.
328 if (pending_task.task.IsCancelled()) 321 if (pending_task.task.IsCancelled())
329 return ProcessTaskResult::EXECUTED; 322 return ProcessTaskResult::EXECUTED;
330 323
331 internal::TaskQueueImpl* queue = work_queue->task_queue(); 324 internal::TaskQueueImpl* queue = work_queue->task_queue();
332 if (queue->GetQuiescenceMonitored()) 325 if (queue->GetQuiescenceMonitored())
333 task_was_run_on_quiescence_monitored_queue_ = true; 326 task_was_run_on_quiescence_monitored_queue_ = true;
334 327
335 static const char kBlinkSchedulerTaskFunctionNameKey[] =
336 "blink_scheduler_task_function_name";
337 static const char kBlinkSchedulerTaskFileNameKey[] =
338 "blink_scheduler_task_file_name";
339
340 bool is_nested = delegate_->IsNested();
341 if (!is_nested && set_crash_keys_) {
342 base::debug::SetCrashKeyValue(kBlinkSchedulerTaskFunctionNameKey,
343 pending_task.posted_from.file_name());
344 base::debug::SetCrashKeyValue(kBlinkSchedulerTaskFileNameKey,
345 pending_task.posted_from.function_name());
346 }
347
348 if (!pending_task.nestable && delegate_->IsNested()) { 328 if (!pending_task.nestable && delegate_->IsNested()) {
349 // Defer non-nestable work to the main task runner. NOTE these tasks can be 329 // Defer non-nestable work to the main task runner. NOTE these tasks can be
350 // arbitrarily delayed so the additional delay should not be a problem. 330 // arbitrarily delayed so the additional delay should not be a problem.
351 // TODO(skyostil): Figure out a way to not forget which task queue the 331 // TODO(skyostil): Figure out a way to not forget which task queue the
352 // task is associated with. See http://crbug.com/522843. 332 // task is associated with. See http://crbug.com/522843.
353 // TODO(tzik): Remove base::UnsafeConvertOnceClosureToRepeating once 333 // TODO(tzik): Remove base::UnsafeConvertOnceClosureToRepeating once
354 // TaskRunners have migrated to OnceClosure. 334 // TaskRunners have migrated to OnceClosure.
355 delegate_->PostNonNestableTask( 335 delegate_->PostNonNestableTask(
356 pending_task.posted_from, 336 pending_task.posted_from,
357 UnsafeConvertOnceClosureToRepeating(std::move(pending_task.task))); 337 UnsafeConvertOnceClosureToRepeating(std::move(pending_task.task)));
(...skipping 11 matching lines...) Expand all
369 } 349 }
370 TRACE_EVENT1(tracing_category_, "TaskQueueManager::RunTask", "queue", 350 TRACE_EVENT1(tracing_category_, "TaskQueueManager::RunTask", "queue",
371 queue->GetName()); 351 queue->GetName());
372 // NOTE when TaskQueues get unregistered a reference ends up getting retained 352 // NOTE when TaskQueues get unregistered a reference ends up getting retained
373 // 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
374 // we are OK to use raw pointers here. 354 // we are OK to use raw pointers here.
375 internal::TaskQueueImpl* prev_executing_task_queue = 355 internal::TaskQueueImpl* prev_executing_task_queue =
376 currently_executing_task_queue_; 356 currently_executing_task_queue_;
377 currently_executing_task_queue_ = queue; 357 currently_executing_task_queue_ = queue;
378 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task); 358 task_annotator_.RunTask("TaskQueueManager::PostTask", &pending_task);
379
380 // 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
381 // not access any member variables after this point. 360 // not access any member variables after this point.
382 if (protect->HasOneRef()) 361 if (protect->HasOneRef())
383 return ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED; 362 return ProcessTaskResult::TASK_QUEUE_MANAGER_DELETED;
384 363
385 if (!is_nested && set_crash_keys_) {
386 base::debug::ClearCrashKey(kBlinkSchedulerTaskFunctionNameKey);
387 base::debug::ClearCrashKey(kBlinkSchedulerTaskFileNameKey);
388 }
389
390 currently_executing_task_queue_ = prev_executing_task_queue; 364 currently_executing_task_queue_ = prev_executing_task_queue;
391 365
392 if (queue->GetShouldNotifyObservers()) { 366 if (queue->GetShouldNotifyObservers()) {
393 for (auto& observer : task_observers_) 367 for (auto& observer : task_observers_)
394 observer.DidProcessTask(pending_task); 368 observer.DidProcessTask(pending_task);
395 queue->NotifyDidProcessTask(pending_task); 369 queue->NotifyDidProcessTask(pending_task);
396 } 370 }
397 371
398 return ProcessTaskResult::EXECUTED; 372 return ProcessTaskResult::EXECUTED;
399 } 373 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 *work_queue->GetFrontTask()); 490 *work_queue->GetFrontTask());
517 } 491 }
518 } 492 }
519 493
520 bool TaskQueueManager::HasImmediateWorkForTesting() const { 494 bool TaskQueueManager::HasImmediateWorkForTesting() const {
521 return !selector_.EnabledWorkQueuesEmpty(); 495 return !selector_.EnabledWorkQueuesEmpty();
522 } 496 }
523 497
524 } // namespace scheduler 498 } // namespace scheduler
525 } // namespace blink 499 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698