| OLD | NEW |
| 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 "ui/display/chromeos/configure_displays_task.h" | 5 #include "ui/display/chromeos/configure_displays_task.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "ui/display/types/display_snapshot.h" | 9 #include "ui/display/types/display_snapshot.h" |
| 10 #include "ui/display/types/native_display_delegate.h" | 10 #include "ui/display/types/native_display_delegate.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 } | 58 } |
| 59 | 59 |
| 60 void ConfigureDisplaysTask::Run() { | 60 void ConfigureDisplaysTask::Run() { |
| 61 // Synchronous configurators will recursively call Run(). In that case just | 61 // Synchronous configurators will recursively call Run(). In that case just |
| 62 // defer their call to the next iteration in the while-loop. This is done to | 62 // defer their call to the next iteration in the while-loop. This is done to |
| 63 // guard against stack overflows if the display has a large list of broken | 63 // guard against stack overflows if the display has a large list of broken |
| 64 // modes. | 64 // modes. |
| 65 if (is_configuring_) | 65 if (is_configuring_) |
| 66 return; | 66 return; |
| 67 | 67 |
| 68 base::AutoReset<bool> recursivity_guard(&is_configuring_, true); | 68 { |
| 69 while (!pending_request_indexes_.empty()) { | 69 base::AutoReset<bool> recursivity_guard(&is_configuring_, true); |
| 70 size_t index = pending_request_indexes_.front(); | 70 while (!pending_request_indexes_.empty()) { |
| 71 DisplayConfigureRequest* request = &requests_[index]; | 71 size_t index = pending_request_indexes_.front(); |
| 72 pending_request_indexes_.pop(); | 72 DisplayConfigureRequest* request = &requests_[index]; |
| 73 delegate_->Configure(*request->display, request->mode, request->origin, | 73 pending_request_indexes_.pop(); |
| 74 base::Bind(&ConfigureDisplaysTask::OnConfigured, | 74 delegate_->Configure(*request->display, request->mode, request->origin, |
| 75 weak_ptr_factory_.GetWeakPtr(), index)); | 75 base::Bind(&ConfigureDisplaysTask::OnConfigured, |
| 76 weak_ptr_factory_.GetWeakPtr(), index)); |
| 77 } |
| 76 } | 78 } |
| 77 | 79 |
| 78 // Nothing should be modified after the |callback_| is called since thie | 80 // Nothing should be modified after the |callback_| is called since the |
| 79 // task may be deleted in the callback. | 81 // task may be deleted in the callback. |
| 80 if (num_displays_configured_ == requests_.size()) | 82 if (num_displays_configured_ == requests_.size()) |
| 81 callback_.Run(task_status_); | 83 callback_.Run(task_status_); |
| 82 } | 84 } |
| 83 | 85 |
| 84 void ConfigureDisplaysTask::OnConfigured(size_t index, bool success) { | 86 void ConfigureDisplaysTask::OnConfigured(size_t index, bool success) { |
| 85 DisplayConfigureRequest* request = &requests_[index]; | 87 DisplayConfigureRequest* request = &requests_[index]; |
| 86 VLOG(2) << "Configured status=" << success | 88 VLOG(2) << "Configured status=" << success |
| 87 << " display=" << request->display->display_id() | 89 << " display=" << request->display->display_id() |
| 88 << " origin=" << request->origin.ToString() | 90 << " origin=" << request->origin.ToString() |
| (...skipping 14 matching lines...) Expand all Loading... |
| 103 } | 105 } |
| 104 | 106 |
| 105 num_displays_configured_++; | 107 num_displays_configured_++; |
| 106 if (!success) | 108 if (!success) |
| 107 task_status_ = ERROR; | 109 task_status_ = ERROR; |
| 108 | 110 |
| 109 Run(); | 111 Run(); |
| 110 } | 112 } |
| 111 | 113 |
| 112 } // namespace ui | 114 } // namespace ui |
| OLD | NEW |