• chrome窗口


    chrome 窗口的层次:

    父窗口类名:Chrome_WidgetWin_1

    有两个子窗口:

    • Chrome_RenderWidgetHostHWND
    • Intermediate D3D Window

    // 用于匹配 Chrome 窗口的窗口类的前缀。

    onst wchar_t kChromeWindowClassPrefix[] = L"Chrome_WidgetWin_";

    const wchar_t kLegacyRenderWidgetHostHwnd[] = L"Chrome_RenderWidgetHostHWND";

    Chrome_RenderWidgetHostHWND 窗口的作用:

    content/browser/renderer_host/legacy_render_widget_host_win.h

    1. // Reasons for the existence of this class outlined below:-
    2. // 1. Some screen readers expect every tab / every unique web content container
    3. // to be in its own HWND with class name Chrome_RenderWidgetHostHWND.
    4. // With Aura there is one main HWND which comprises the whole browser window
    5. // or the whole desktop. So, we need a fake HWND with the window class as
    6. // Chrome_RenderWidgetHostHWND as the root of the accessibility tree for
    7. // each tab.
    8. // 2. There are legacy drivers for trackpads/trackpoints which have special
    9. // code for sending mouse wheel and scroll events to the
    10. // Chrome_RenderWidgetHostHWND window.
    11. // 3. Windowless NPAPI plugins like Flash and Silverlight which expect the
    12. // container window to have the same bounds as the web page. In Aura, the
    13. // default container window is the whole window which includes the web page
    14. // WebContents, etc. This causes the plugin mouse event calculations to
    15. // fail.
    16. // We should look to get rid of this code when all of the above are fixed.
    17. // This class implements a child HWND with the same size as the content area,
    18. // that delegates its accessibility implementation to the root of the
    19. // BrowserAccessibilityManager tree. This HWND is hooked up as the parent of
    20. // the root object in the BrowserAccessibilityManager tree, so when any
    21. // accessibility client calls ::WindowFromAccessibleObject, they get this
    22. // HWND instead of the DesktopWindowTreeHostWin.

    此类存在的原因概述如下:-
    1. 一些屏幕阅读器期望每个选项卡/每个唯一的 Web 内容容器位于其自己的 HWND 中,类名为 Chrome_RenderWidgetHostHWND。 对于 Aura,有一个主要的 HWND,它包含整个浏览器窗口
    或整个桌面。 所以,我们需要一个假的 HWND,其窗口类为Chrome_RenderWidgetHostHWND 作为可访问性树的根每个选项卡。
    2. 触控板/轨迹点有一些遗留驱动程序,它们具有特殊的功能发送鼠标滚轮和滚动事件的代码
    Chrome_RenderWidgetHostHWND 窗口。
    3. Flash 和 Silverlight 等无窗口 NPAPI 插件需要容器窗口与网页具有相同的边界。 在奥拉中,
    默认容器窗口是包含网页的整个窗口WebContents 等。这会导致插件鼠标事件计算 失败。
    当上述所有问题都解决后,我们应该考虑删除这段代码。

            这个类实现了一个与内容区域大小相同的子HWND, 将其可访问性实现委托给根
    BrowserAccessibilityManager 树。 该 HWND 作为父级连接 BrowserAccessibilityManager 树中的根对象,因此当任何可访问性客户端调用::WindowFromAccessibleObject,他们得到这个HWND 而不是 DesktopWindowTreeHostWin。

    ui/gl/child_window_win.h

    DirectComposition 渲染到的窗口需要由进程拥有当前正在进行渲染。 该类创建并拥有一个窗口
    浏览器将其重新设置为其窗口的子窗口。

    1. // This runs on the window owner thread.
    2. void InitializeWindowClass() {
    3. if (g_window_class)
    4. return;
    5. WNDCLASSEX intermediate_class;
    6. base::win::InitializeWindowClass(
    7. L"Intermediate D3D Window",
    8. &base::win::WrappedWindowProc<::DefWindowProc>, CS_OWNDC, 0, 0, nullptr,
    9. reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)), nullptr, nullptr,
    10. nullptr, &intermediate_class);
    11. g_window_class = RegisterClassEx(&intermediate_class);
    12. if (!g_window_class) {
    13. LOG(ERROR) << "RegisterClass failed.";
    14. return;
    15. }
    16. }

     Intermediate D3D Window 窗口对应的进程id 是 十进制:4340;

    这个窗口是gpu进程创建的,作为一个子窗口嵌入到父窗口 Chrome_WidgetWin_1 中,chrome在使用gpu渲染时,网页的渲染最后会在GPU中渲染,即 Intermediate D3D Window 窗口

  • 相关阅读:
    谁能撑起植发企业的“第二曲线”?
    ElasticSearch-查询语法(结构化查询)
    Linux 64位 C++协程池原理分析及代码实现
    QianBase MPP之qb_toolkit管理模式
    搭建nuxt3项目(框架构建)
    GeoServer:Vector Tiles-矢量瓦片制作与加载
    华为云 云耀云服务器L实例评测|使用宝塔一键部署自己专属网站
    JUC并发编程——集合类不安全及Callable(基于狂神说的学习笔记)
    GSW同态加密方案学习
    药师帮再冲刺上市:研发远低于营销,债务高企,张步镇为董事长
  • 原文地址:https://blog.csdn.net/LIJIWEI0611/article/details/133634078