| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/memory/tab_manager.h" | 5 #include "chrome/browser/memory/tab_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 LenientMockTaskRunner() {} | 93 LenientMockTaskRunner() {} |
| 94 MOCK_METHOD2(PostDelayedTask, | 94 MOCK_METHOD2(PostDelayedTask, |
| 95 bool(const tracked_objects::Location&, base::TimeDelta)); | 95 bool(const tracked_objects::Location&, base::TimeDelta)); |
| 96 | 96 |
| 97 private: | 97 private: |
| 98 DISALLOW_COPY_AND_ASSIGN(LenientMockTaskRunner); | 98 DISALLOW_COPY_AND_ASSIGN(LenientMockTaskRunner); |
| 99 }; | 99 }; |
| 100 using MockTaskRunner = testing::StrictMock<LenientMockTaskRunner>; | 100 using MockTaskRunner = testing::StrictMock<LenientMockTaskRunner>; |
| 101 | 101 |
| 102 // Represents a pending task. | 102 // Represents a pending task. |
| 103 using Task = std::pair<base::TimeTicks, base::Closure>; | 103 using Task = std::pair<base::TimeTicks, base::OnceClosure>; |
| 104 | 104 |
| 105 // Comparator used for sorting Task objects. Can't use std::pair's default | 105 // Comparator used for sorting Task objects. Can't use std::pair's default |
| 106 // comparison operators because Closure's are comparable. | 106 // comparison operators because Closure's are comparable. |
| 107 struct TaskComparator { | 107 struct TaskComparator { |
| 108 bool operator()(const Task& t1, const Task& t2) const { | 108 bool operator()(const Task& t1, const Task& t2) const { |
| 109 // Reverse the sort order so this can be used with a min-heap. | 109 // Reverse the sort order so this can be used with a min-heap. |
| 110 return t1.first > t2.first; | 110 return t1.first > t2.first; |
| 111 } | 111 } |
| 112 }; | 112 }; |
| 113 | 113 |
| 114 // A TaskRunner implementation that delegates to a MockTaskRunner for asserting | 114 // A TaskRunner implementation that delegates to a MockTaskRunner for asserting |
| 115 // on task insertion order, and which stores tasks for actual later execution. | 115 // on task insertion order, and which stores tasks for actual later execution. |
| 116 class TaskRunnerProxy : public base::TaskRunner { | 116 class TaskRunnerProxy : public base::TaskRunner { |
| 117 public: | 117 public: |
| 118 TaskRunnerProxy(MockTaskRunner* mock, | 118 TaskRunnerProxy(MockTaskRunner* mock, |
| 119 base::SimpleTestTickClock* clock) | 119 base::SimpleTestTickClock* clock) |
| 120 : mock_(mock), clock_(clock) {} | 120 : mock_(mock), clock_(clock) {} |
| 121 bool RunsTasksOnCurrentThread() const override { return true; } | 121 bool RunsTasksOnCurrentThread() const override { return true; } |
| 122 bool PostDelayedTask(const tracked_objects::Location& location, | 122 bool PostDelayedTask(const tracked_objects::Location& location, |
| 123 base::Closure closure, | 123 base::OnceClosure closure, |
| 124 base::TimeDelta delta) override { | 124 base::TimeDelta delta) override { |
| 125 mock_->PostDelayedTask(location, delta); | 125 mock_->PostDelayedTask(location, delta); |
| 126 base::TimeTicks when = clock_->NowTicks() + delta; | 126 base::TimeTicks when = clock_->NowTicks() + delta; |
| 127 tasks_.push_back(Task(when, std::move(closure))); | 127 tasks_.push_back(Task(when, std::move(closure))); |
| 128 // Use 'greater' comparator to make this a min heap. | 128 // Use 'greater' comparator to make this a min heap. |
| 129 std::push_heap(tasks_.begin(), tasks_.end(), TaskComparator()); | 129 std::push_heap(tasks_.begin(), tasks_.end(), TaskComparator()); |
| 130 return true; | 130 return true; |
| 131 } | 131 } |
| 132 | 132 |
| 133 // Runs tasks up to the current time. Returns the number of tasks executed. | 133 // Runs tasks up to the current time. Returns the number of tasks executed. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 162 | 162 |
| 163 size_t size() const { return tasks_.size(); } | 163 size_t size() const { return tasks_.size(); } |
| 164 | 164 |
| 165 private: | 165 private: |
| 166 ~TaskRunnerProxy() override {} | 166 ~TaskRunnerProxy() override {} |
| 167 | 167 |
| 168 MockTaskRunner* mock_; | 168 MockTaskRunner* mock_; |
| 169 base::SimpleTestTickClock* clock_; | 169 base::SimpleTestTickClock* clock_; |
| 170 | 170 |
| 171 // A min-heap of outstanding tasks. | 171 // A min-heap of outstanding tasks. |
| 172 using Task = std::pair<base::TimeTicks, base::Closure>; | 172 using Task = std::pair<base::TimeTicks, base::OnceClosure>; |
| 173 std::vector<Task> tasks_; | 173 std::vector<Task> tasks_; |
| 174 | 174 |
| 175 DISALLOW_COPY_AND_ASSIGN(TaskRunnerProxy); | 175 DISALLOW_COPY_AND_ASSIGN(TaskRunnerProxy); |
| 176 }; | 176 }; |
| 177 | 177 |
| 178 enum TestIndicies { | 178 enum TestIndicies { |
| 179 kSelected, | 179 kSelected, |
| 180 kAutoDiscardable, | 180 kAutoDiscardable, |
| 181 kPinned, | 181 kPinned, |
| 182 kApp, | 182 kApp, |
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 // Since tab2 is kept inactive and background for more than time-to-purge, | 744 // Since tab2 is kept inactive and background for more than time-to-purge, |
| 745 // tab2 should be purged. | 745 // tab2 should be purged. |
| 746 EXPECT_TRUE(tab_manager.GetWebContentsData(tab2)->is_purged()); | 746 EXPECT_TRUE(tab_manager.GetWebContentsData(tab2)->is_purged()); |
| 747 | 747 |
| 748 // Activate tab2. Tab2's PurgeAndSuspend state should be NOT_PURGED. | 748 // Activate tab2. Tab2's PurgeAndSuspend state should be NOT_PURGED. |
| 749 tabstrip.ActivateTabAt(1, true /* user_gesture */); | 749 tabstrip.ActivateTabAt(1, true /* user_gesture */); |
| 750 EXPECT_FALSE(tab_manager.GetWebContentsData(tab2)->is_purged()); | 750 EXPECT_FALSE(tab_manager.GetWebContentsData(tab2)->is_purged()); |
| 751 } | 751 } |
| 752 | 752 |
| 753 } // namespace memory | 753 } // namespace memory |
| OLD | NEW |