diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-06 06:14:27 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-06 06:14:27 +0000 |
commit | 7f318427f29307731682706c26aaf3ee96a6a694 (patch) | |
tree | 8eec32b45c9f10a9c9c0a15697354c52ef575cb5 /ui/surface | |
parent | a0f8b873428cf9ead3de709b0fdb34d5db8963dd (diff) | |
download | chromium_src-7f318427f29307731682706c26aaf3ee96a6a694.zip chromium_src-7f318427f29307731682706c26aaf3ee96a6a694.tar.gz chromium_src-7f318427f29307731682706c26aaf3ee96a6a694.tar.bz2 |
Move initialization of D3D earlier in present thread lifetime.
This improves startup time.
Fixed bug where initial window size was treated as a resize and triggered the slow GDI path.
Previous version was r171174, which was reverted. This patch is different because it does not initialize D3D until an AcceleratedPresenter is created but does not wait for the first present.
BUG=163215,164414,164398
Review URL: https://chromiumcodereview.appspot.com/11445029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171413 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/surface')
-rw-r--r-- | ui/surface/accelerated_surface_win.cc | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/ui/surface/accelerated_surface_win.cc b/ui/surface/accelerated_surface_win.cc index 4ed0ffd4..969bf8a 100644 --- a/ui/surface/accelerated_surface_win.cc +++ b/ui/surface/accelerated_surface_win.cc @@ -189,6 +189,7 @@ class PresentThread : public base::Thread, void ResetDevice(); protected: + virtual void Init(); virtual void CleanUp(); private: @@ -353,6 +354,11 @@ void PresentThread::ResetDevice() { device_->SetVertexDeclaration(vertex_declaration); } +void PresentThread::Init() { + TRACE_EVENT0("gpu", "Initialize thread"); + InitDevice(); +} + void PresentThread::CleanUp() { // The D3D device and query are leaked because destroying the associated D3D // query crashes some Intel drivers. @@ -365,18 +371,19 @@ PresentThread::~PresentThread() { } PresentThreadPool::PresentThreadPool() : next_thread_(0) { - // Do this in the constructor so present_threads_ is initialized before any - // other thread sees it. See LazyInstance documentation. - for (int i = 0; i < kNumPresentThreads; ++i) { - present_threads_[i] = new PresentThread( - base::StringPrintf("PresentThread #%d", i).c_str()); - present_threads_[i]->Start(); - } } PresentThread* PresentThreadPool::NextThread() { next_thread_ = (next_thread_ + 1) % kNumPresentThreads; - return present_threads_[next_thread_].get(); + PresentThread* thread = present_threads_[next_thread_].get(); + if (!thread) { + thread = new PresentThread( + base::StringPrintf("PresentThread #%d", next_thread_).c_str()); + thread->Start(); + present_threads_[next_thread_] = thread; + } + + return thread; } AcceleratedPresenterMap::AcceleratedPresenterMap() { @@ -1018,7 +1025,7 @@ gfx::Size AcceleratedPresenter::GetWindowSize() { bool AcceleratedPresenter::CheckDirect3DWillWork() { gfx::Size window_size = GetWindowSize(); - if (window_size != last_window_size_) { + if (window_size != last_window_size_ && last_window_size_.GetArea() != 0) { last_window_size_ = window_size; last_window_resize_time_ = base::Time::Now(); return false; |