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

Unified Diff: services/ui/demo/mus_demo_external.cc

Issue 2755673003: Allow parallel creation of windows
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: services/ui/demo/mus_demo_external.cc
diff --git a/services/ui/demo/mus_demo_external.cc b/services/ui/demo/mus_demo_external.cc
index f76c0a8dedbb0952bb9b9b23f555755a2acbb644..1d787d598ec21d6fcd5d8aab0ea94264accc68f7 100644
--- a/services/ui/demo/mus_demo_external.cc
+++ b/services/ui/demo/mus_demo_external.cc
@@ -19,19 +19,6 @@ namespace demo {
namespace {
-class WindowTreeDataExternal : public WindowTreeData {
- public:
- // Creates a new window tree host associated to the WindowTreeData.
- WindowTreeDataExternal(aura::WindowTreeClient* window_tree_client,
- int square_size)
- : WindowTreeData(square_size) {
- SetWindowTreeHost(
- base::MakeUnique<aura::WindowTreeHostMus>(window_tree_client));
- }
-
- DISALLOW_COPY_AND_ASSIGN(WindowTreeDataExternal);
-};
-
int GetSquareSizeForWindow(int window_index) {
return 50 * window_index + 400;
};
@@ -68,27 +55,35 @@ void MusDemoExternal::OnStartImpl() {
// TODO(tonikitoo,fwang): New windows can be launched without need to wait
// the respective ::OnEmbed call of the previous instance.
- OpenNewWindow();
+ for (size_t i = 0; i < number_of_windows_; ++i) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(&MusDemoExternal::OpenNewWindow, base::Unretained(this)));
+ }
fwang 2017/03/15 14:37:56 Do you really need this post task stuff? I think y
msisov 2017/03/16 08:17:52 Done.
}
void MusDemoExternal::OpenNewWindow() {
- AppendWindowTreeData(base::MakeUnique<WindowTreeDataExternal>(
- window_tree_client(),
- GetSquareSizeForWindow(initialized_windows_count_)));
+ std::unique_ptr<aura::WindowTreeHostMus> mus =
+ base::MakeUnique<aura::WindowTreeHostMus>(window_tree_client());
+ window_tree_host_mus_list_.push_back(std::move(mus));
fwang 2017/03/15 14:37:56 I believe you should keep appending to window_tree
msisov 2017/03/16 08:17:51 Done.
}
-void MusDemoExternal::OnEmbed(
- std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) {
- DCHECK(!window_tree_host);
+void MusDemoExternal::OnRootWindowEmbed(
+ aura::WindowTreeHostMus* window_tree_host) {
+ DCHECK(window_tree_host);
+
+ auto it = std::find_if(
+ window_tree_host_mus_list_.begin(), window_tree_host_mus_list_.end(),
+ [window_tree_host](std::unique_ptr<aura::WindowTreeHostMus>& mus) {
+ return mus.get() == window_tree_host;
+ });
- // TODO: Clean up WindowTreeClientDelegate::OnEmbed API so that it passes
- // no ownership of WindowTreeHostMus instance.
- InitWindowTreeData(nullptr);
- initialized_windows_count_++;
+ DCHECK(it != window_tree_host_mus_list_.end());
fwang 2017/03/15 14:37:56 This logic exists in RemoveWindowTreeData, so it s
msisov 2017/03/16 08:17:51 Ok, I've made FindWindowTreeData, which returns an
+ AppendWindowTreeData(base::MakeUnique<WindowTreeData>(
+ GetSquareSizeForWindow(initialized_windows_count_++)));
+ InitWindowTreeData(std::move(*it));
tonikitoo 2017/03/15 15:34:54 now that you are passing a valid unique_ptr always
msisov 2017/03/16 08:17:51 Logic is changed. So it's still applicable.
- // Open the next window until the requested number of windows is reached.
- if (initialized_windows_count_ < number_of_windows_)
- OpenNewWindow();
+ window_tree_host_mus_list_.erase(it);
fwang 2017/03/15 14:37:56 No need to do that if your use window_tree_data_li
msisov 2017/03/16 08:17:52 Done.
}
void MusDemoExternal::OnEmbedRootDestroyed(

Powered by Google App Engine
This is Rietveld 408576698