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

Side by Side Diff: content/child/scheduler/task_queue_manager_unittest.cc

Issue 1072473002: Speculative patch: Make it safe to delete the TQM inside a Task (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 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 "content/child/scheduler/task_queue_manager.h" 5 #include "content/child/scheduler/task_queue_manager.h"
6 6
7 #include "base/threading/thread.h" 7 #include "base/threading/thread.h"
8 #include "cc/test/ordered_simple_task_runner.h" 8 #include "cc/test/ordered_simple_task_runner.h"
9 #include "cc/test/test_now_source.h" 9 #include "cc/test/test_now_source.h"
10 #include "content/child/scheduler/nestable_task_runner_for_test.h" 10 #include "content/child/scheduler/nestable_task_runner_for_test.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 } 91 }
92 92
93 private: 93 private:
94 std::deque<size_t> queues_to_service_; 94 std::deque<size_t> queues_to_service_;
95 std::vector<const base::TaskQueue*> work_queues_; 95 std::vector<const base::TaskQueue*> work_queues_;
96 96
97 DISALLOW_COPY_AND_ASSIGN(ExplicitSelectorForTest); 97 DISALLOW_COPY_AND_ASSIGN(ExplicitSelectorForTest);
98 }; 98 };
99 99
100 class TaskQueueManagerTest : public testing::Test { 100 class TaskQueueManagerTest : public testing::Test {
101 public:
102 void DeleteTaskQueueManager() {
103 manager_.reset();
104 }
105
101 protected: 106 protected:
102 enum class SelectorType { 107 enum class SelectorType {
103 Automatic, 108 Automatic,
104 Explicit, 109 Explicit,
105 }; 110 };
106 111
107 void Initialize(size_t num_queues, SelectorType type) { 112 void Initialize(size_t num_queues, SelectorType type) {
108 now_src_ = cc::TestNowSource::Create(1000); 113 now_src_ = cc::TestNowSource::Create(1000);
109 test_task_runner_ = 114 test_task_runner_ =
110 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(now_src_, false)); 115 make_scoped_refptr(new cc::OrderedSimpleTaskRunner(now_src_, false));
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(5); 1034 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(5);
1030 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(10); 1035 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(10);
1031 runners[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay1); 1036 runners[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay1);
1032 runners[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay2); 1037 runners[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay2);
1033 runners[2]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay3); 1038 runners[2]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay3);
1034 1039
1035 EXPECT_EQ(now_src_->Now() + delay2, 1040 EXPECT_EQ(now_src_->Now() + delay2,
1036 manager_->NextPendingDelayedTaskRunTime()); 1041 manager_->NextPendingDelayedTaskRunTime());
1037 } 1042 }
1038 1043
1044 TEST_F(TaskQueueManagerTest, DeleteTqmInTask) {
Sami 2015/04/08 14:24:04 nit: s/Tqm/Manager/ or something since we're not r
alex clarke (OOO till 29th) 2015/04/08 14:33:05 Done.
1045 Initialize(1u, SelectorType::Automatic);
1046
1047 scoped_refptr<base::SingleThreadTaskRunner> runner =
1048 manager_->TaskRunnerForQueue(0);
1049 runner->PostTask(FROM_HERE,
1050 base::Bind(&TaskQueueManagerTest::DeleteTaskQueueManager,
1051 base::Unretained(this)));
1052
1053 // This should not crash, assuming DoWork detects the TaskQueueManager has
1054 // been deleted.
1055 test_task_runner_->RunUntilIdle();
1056 }
1057
1039 } // namespace 1058 } // namespace
1040 } // namespace content 1059 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698