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

Unified Diff: chrome/browser/renderer_host/render_widget_host_view_win.cc

Issue 6880218: Removed "compositor" child window that was created by the GPU process. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/render_widget_host_view_win.cc
===================================================================
--- chrome/browser/renderer_host/render_widget_host_view_win.cc (revision 83102)
+++ chrome/browser/renderer_host/render_widget_host_view_win.cc (working copy)
@@ -319,11 +319,6 @@
ScreenToClient(&point);
SetWindowPos(NULL, point.x, point.y, rect.width(), rect.height(), swp_flags);
- if (compositor_host_window_) {
- ::SetWindowPos(compositor_host_window_, NULL, point.x, point.y,
- rect.width(), rect.height(),
- SWP_NOSENDCHANGING | SWP_NOCOPYBITS | SWP_NOZORDER | SWP_NOACTIVATE);
- }
render_widget_host_->WasResized();
EnsureTooltip();
}
@@ -462,14 +457,20 @@
if (!compositor_host_window_)
return;
- std::vector<HWND> all_child_windows;
- ::EnumChildWindows(compositor_host_window_, AddChildWindowToVector,
- reinterpret_cast<LPARAM>(&all_child_windows));
- if (all_child_windows.size()) {
- DCHECK(all_child_windows.size() == 1);
- ::ShowWindow(all_child_windows[0], SW_HIDE);
- ::SetParent(all_child_windows[0], NULL);
- }
+ // Hide the compositor and parent it to the desktop rather than destroying
+ // it immediately. The GPU process has a grace period to stop accessing the
+ // window. TODO(apatrick): the GPU process should acknowledge that it has
+ // finished with the window handle and the browser process should destroy it
+ // at that point.
+ ::ShowWindow(compositor_host_window_, SW_HIDE);
+ ::SetParent(compositor_host_window_, NULL);
+
+ BrowserThread::PostDelayedTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ NewRunnableFunction(::DestroyWindow, compositor_host_window_),
+ 10000);
jam 2011/04/27 20:45:22 nit: use constant
apatrick_chromium 2011/04/27 22:45:22 Done.
+
compositor_host_window_ = NULL;
}
@@ -1466,31 +1467,10 @@
browser_accessibility_manager_.reset(NULL);
}
-// Looks through the children windows of the CompositorHostWindow. If the
-// compositor child window is found, its size is checked against the host
-// window's size. If the child is smaller in either dimensions, we fill
-// the host window with white to avoid unseemly cracks.
static void PaintCompositorHostWindow(HWND hWnd) {
PAINTSTRUCT paint;
BeginPaint(hWnd, &paint);
- std::vector<HWND> child_windows;
- EnumChildWindows(hWnd, AddChildWindowToVector,
- reinterpret_cast<LPARAM>(&child_windows));
-
- if (child_windows.size()) {
- HWND child = child_windows[0];
-
- RECT host_rect, child_rect;
- GetClientRect(hWnd, &host_rect);
- if (GetClientRect(child, &child_rect)) {
- if (child_rect.right < host_rect.right ||
- child_rect.bottom != host_rect.bottom) {
- FillRect(paint.hdc, &host_rect,
- static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)));
- }
- }
- }
EndPaint(hWnd, &paint);
}
@@ -1562,12 +1542,7 @@
return;
if (show) {
- UINT flags = SWP_NOSENDCHANGING | SWP_NOCOPYBITS | SWP_NOZORDER |
- SWP_NOACTIVATE | SWP_DEFERERASE | SWP_SHOWWINDOW;
- gfx::Rect rect = GetViewBounds();
- ::SetWindowPos(compositor_host_window_, NULL, 0, 0,
- rect.width(), rect.height(),
- flags);
+ ::ShowWindow(compositor_host_window_, SW_SHOW);
// Get all the child windows of this view, including the compositor window.
std::vector<HWND> all_child_windows;

Powered by Google App Engine
This is Rietveld 408576698