乐于分享
好东西不私藏

Android 14 WMS窗口层级树源码深度解析

Android 14 WMS窗口层级树源码深度解析

1. WMS窗口层级树概述

在Android系统中,WindowManagerService(WMS)是负责管理所有窗口的核心服务,而窗口层级树是WMS中用于组织和管理窗口显示结构的关键数据结构。它定义了窗口在Z轴上的顺序、布局关系以及显示层级。

1.1 窗口层级树的基本概念

在Android 14中,窗口层级树是一个以RootWindowContainer为根节点的树形结构。每个节点代表一个窗口容器,可以是窗口本身,也可以是一组窗口的容器。这个树结构不仅管理了窗口的显示顺序,还负责窗口的布局和尺寸计算。

// frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javapublicclassRootWindowContainerextendsWindowContainerimplementsDisplayManager.DisplayListener{// The root of the device window hierarchy.privatefinal WindowManagerService mWmService;// 存储所有DisplayContent的列表,每个DisplayContent对应一个显示屏privatefinal ArrayList<DisplayContent> mDisplays = new ArrayList<>();}

从上述代码可以看出,RootWindowContainer作为窗口层级树的根节点,管理着所有显示屏的窗口内容。

1.2 窗口层级树的整体结构

Android 14的窗口层级树结构可以分为以下几个主要部分:

  1. RootWindowContainer:窗口层级树的根节点,代表整个窗口管理系统
  2. DisplayContent:代表一个显示屏,是窗口层级树中每个显示设备的容器
  3. DisplayArea:显示屏上的一个区域,用于组织窗口的布局
  4. Task/TaskDisplayArea:任务容器,用于管理属于同一任务的一组窗口
  5. WindowToken:窗口令牌,一组相关窗口的容器
  6. WindowState:代表一个具体的窗口
// 窗口层级树结构示例RootWindowContainer └── DisplayContent (主屏幕)     ├── DisplayArea.Tokens (系统窗口容器)     │   ├── WindowToken (StatusBar)     │   ├── WindowToken (NavigationBar)     │   └── WindowToken (InputMethod)     ├── TaskDisplayArea (应用窗口容器)     │   └── Task     │       └── ActivityRecord     │           └── WindowState (Activity窗口)     └── WallpaperWindowToken (壁纸窗口容器)

2. WMS窗口层级树核心数据结构

2.1 WindowContainer - 窗口容器基类

WindowContainer是窗口层级树中所有节点的基类,定义了窗口层级树的基本行为和属性。

// frameworks/base/services/core/java/com/android/server/wm/WindowContainer.javaclassWindowContainerextendsWindowContainer{// 父节点private WindowContainer mParent = null;// 子节点列表,按照Z轴顺序排列,最顶层的窗口容器位于列表尾部protectedfinal WindowList mChildren = new WindowList();// 窗口容器的名称private String mName;// 窗口容器的层级privateint mLayer;// 窗口容器的可见性privateboolean mVisible = true;}

WindowContainer类提供了窗口层级树的基本结构,包括父子关系、Z轴顺序等核心概念。

2.2 DisplayContent - 显示屏内容

DisplayContent代表一个显示屏,是窗口层级树中每个显示设备的容器。它管理着该显示屏上的所有窗口和区域。

// frameworks/base/services/core/java/com/android/server/wm/DisplayContent.javaclassDisplayContentextendsRootDisplayAreaimplementsWindowManagerPolicy.DisplayContentInfo{// 显示屏IDprivatefinalint mDisplayId;// 显示屏的区域privatefinal Rect mDisplayFrame;// 窗口放置器privatefinal WindowSurfacePlacer mSurfacePlacer;// 输入监视器privatefinal InputMonitor mInputMonitor;// 显示策略privatefinal DisplayPolicy mDisplayPolicy;}

DisplayContent负责管理单个显示屏上的所有窗口,包括布局、显示和输入处理。

2.3 WindowState - 窗口状态

WindowState代表一个具体的窗口,是窗口层级树中最底层的节点。

// frameworks/base/services/core/java/com/android/server/wm/WindowState.javaclassWindowStateextendsWindowContainerimplementsWindowManagerPolicy.WindowState{// 窗口令牌privatefinal WindowToken mToken;// 窗口属性privatefinal WindowManager.LayoutParams mAttrs;// 窗口框架privatefinal WindowFrames mWindowFrames;// 窗口是否拥有表面privateboolean mHasSurface;// 窗口是否需要布局privateboolean mLayoutNeeded;}

WindowState包含了窗口的所有状态信息,包括位置、大小、可见性等。

2.4 WindowToken - 窗口令牌

WindowToken是一组相关窗口的容器,通常用于管理具有相同父窗口或用途的一组窗口。

// frameworks/base/services/core/java/com/android/server/wm/WindowToken.javaclassWindowTokenextendsWindowContainer{// 窗口令牌类型privatefinalint mType;// 父窗口privatefinal WindowContainer mParent;// 窗口列表privatefinal ArrayList<WindowState> mWindows = new ArrayList<>();}

WindowToken在窗口层级树中充当中间节点,用于组织和管理一组相关的窗口。

3. WMS窗口层级树管理机制

3.1 窗口添加流程

窗口的添加是WMS的核心功能之一。当应用需要显示一个窗口时,它会通过ViewRootImpl向WMS请求添加一个窗口。

  1. 应用端请求添加窗口

    // ViewRootImpl.javapublicvoidsetView(View view, WindowManager.LayoutParams attrs, View panelParentView, int userId){// ...// 通过Binder调用WMS的addWindow方法    res = mWindowSession.addToDisplayAsUser(mWindow, mWindowAttributes, getHostVisibility(),         mDisplay.getDisplayId(), userId, mInsetsController.getRequestedVisibilities(),         inputChannel, mTempInsets, mTempControls);// ...}
  2. WMS处理添加窗口请求

    // WindowManagerService.javapublicintaddWindow(Session session, IWindow window, WindowManager.LayoutParams attrs,int requestedWidth, int requestedHeight, int viewVisibility, int flags,        ClientWindowFrames outFrames, MergedConfiguration mergedConfiguration,        SurfaceControl outSurfaceControl, InsetsState outInsetsState,        InsetsSourceControl[] outActiveControls, Bundle outSyncSeqIdBundle){// ...// 创建WindowState对象final WindowState win = new WindowState(this, session, window, attrs);// ...// 将窗口添加到窗口层级树中    addWindowToToken(win, attrs);// ...}
  3. 将窗口添加到窗口层级树

    // WindowManagerService.javaprivatevoidaddWindowToToken(WindowState win, WindowManager.LayoutParams attrs){// ...// 获取或创建WindowToken    WindowToken token = getTokenForType(attrs.type, attrs.token, attrs.packageName);// ...// 将WindowState添加到WindowToken中    token.addChild(win);// ...}

3.2 窗口布局流程

窗口布局是WMS的另一个核心功能,它决定了窗口的大小和位置。

  1. 请求布局

    // ViewRootImpl.javapublicvoidrequestLayout(){if (!mHandlingLayoutInLayoutRequest) {        checkThread();        mLayoutRequested = true;        scheduleTraversals();    }}
  2. 执行布局

    // ViewRootImpl.javaprivatevoidperformTraversals(){// ...// 请求WMS重新布局窗口    relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);// ...// 执行测量    performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);// ...// 执行布局if (didLayout) {        performLayout(lp, mWidth, mHeight);    }// ...}
  3. WMS处理布局请求

    // WindowManagerService.javapublicintrelayoutWindow(Session session, IWindow window, WindowManager.LayoutParams attrs,int requestedWidth, int requestedHeight, int viewVisibility, int flags,        ClientWindowFrames outFrames, MergedConfiguration mergedConfiguration,        SurfaceControl outSurfaceControl, InsetsState outInsetsState,        InsetsSourceControl[] outActiveControls, Bundle outSyncSeqIdBundle){// ...// 获取WindowState对象final WindowState win = windowForClientLocked(session, window, false);// ...// 设置请求的大小    win.setRequestedSize(requestedWidth, requestedHeight);// ...// 调整窗口参数    displayPolicy.adjustWindowParamsLw(win, attrs);// ...// 执行表面放置    mWindowPlacerLocked.performSurfacePlacement(true/* force */);// ...}
  4. 执行表面放置

    // WindowSurfacePlacer.javafinalvoidperformSurfacePlacement(boolean force){// ...do {        mTraversalScheduled = false;// 执行一次表面放置循环        performSurfacePlacementLoop();// ...    } while (mTraversalScheduled && loopCount > 0);// ...}
  5. 窗口布局计算

    // DisplayPolicy.javapublicvoidlayoutWindowLw(WindowState win, WindowState attached, DisplayFrames displayFrames){// ...// 获取窗口的布局参数final WindowManager.LayoutParams attrs = win.getLayoutingAttrs(displayFrames.mRotation);// ...// 计算窗口框架    mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe,            win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight,            win.getRequestedVisibilities(), attachedWindowFrame, win.mGlobalScale,            sTmpClientFrames);// ...// 设置窗口框架    win.setFrames(sTmpClientFrames, requestedWidth, requestedHeight);}

3.3 Z轴排序机制

Z轴排序决定了窗口在垂直方向上的显示顺序,即哪个窗口位于上层,哪个窗口位于下层。

  1. Z轴层级定义

    // WindowManagerService.javaprivatestaticfinalint FIRST_APPLICATION_WINDOW = 1;privatestaticfinalint LAST_APPLICATION_WINDOW = 99;privatestaticfinalint FIRST_SYSTEM_WINDOW = 1000;privatestaticfinalint LAST_SYSTEM_WINDOW = 1999;privatestaticfinalint FIRST_SUB_WINDOW = 2000;privatestaticfinalint LAST_SUB_WINDOW = 2999;
  2. 窗口层级分配

    // WindowManagerService.javaprivatevoidassignWindowLayers(WindowState win){// ...// 根据窗口类型分配层级if (win.mAttrs.type >= FIRST_APPLICATION_WINDOW && win.mAttrs.type <= LAST_APPLICATION_WINDOW) {        layer = APPLICATION_LAYER;    } elseif (win.mAttrs.type >= FIRST_SYSTEM_WINDOW && win.mAttrs.type <= LAST_SYSTEM_WINDOW) {        layer = SYSTEM_LAYER;    } elseif (win.mAttrs.type >= FIRST_SUB_WINDOW && win.mAttrs.type <= LAST_SUB_WINDOW) {        layer = SUB_WINDOW_LAYER;    }// ...}
  3. 窗口排序

    // WindowContainer.javaprotectedvoidsortChildren(){// 按照层级排序子窗口    Collections.sort(mChildren, (lhs, rhs) -> {if (lhs.mLayer != rhs.mLayer) {return lhs.mLayer - rhs.mLayer;        }// 如果层级相同,按照添加顺序排序return lhs.mAddOrder - rhs.mAddOrder;    });}

4. 布局流程详解

4.1 布局过程概述

窗口布局是WMS的核心功能之一,它决定了窗口的大小和位置。布局过程涉及多个组件的协作,包括WMS、DisplayPolicy和WindowLayout等。

  1. 布局触发

    • 应用程序调用requestLayout()请求布局
    • WMS调用performSurfacePlacement()触发布局
  2. 布局执行

    • RootWindowContainer.performSurfacePlacement()开始布局过程
    • DisplayContent.performLayout()执行显示屏布局
    • DisplayPolicy.layoutWindowLw()计算每个窗口的布局
  3. 布局应用

    • WindowState.setFrames()应用计算出的布局
    • 窗口的位置和大小得到更新

4.2 布局算法

Android 14的窗口布局算法采用了多种策略,以确保窗口在不同屏幕尺寸和方向下都能正确显示。

  1. 测量阶段

    // WindowLayout.javapublicvoidcomputeFrames(WindowManager.LayoutParams attrs, InsetsState insets,        Rect displayCutoutSafe, Rect bounds, int windowingMode, int requestedWidth,int requestedHeight, int requestedVisibilities, Rect attachedWindowFrame,float globalScale, ClientWindowFrames outFrames){// ...// 计算窗口的可用空间int availableWidth = displayWidth - paddingLeft - paddingRight;int availableHeight = displayHeight - paddingTop - paddingBottom;// ...// 根据布局参数计算窗口大小if (widthMeasureSpec == MeasureSpec.EXACTLY) {        width = availableWidth;    } elseif (widthMeasureSpec == MeasureSpec.AT_MOST) {        width = Math.min(requestedWidth, availableWidth);    } else {        width = requestedWidth;    }// ...}
  2. 布局阶段

    // DisplayPolicy.javapublicvoidlayoutWindowLw(WindowState win, WindowState attached, DisplayFrames displayFrames){// ...// 获取窗口的布局参数final WindowManager.LayoutParams attrs = win.getLayoutingAttrs(displayFrames.mRotation);// ...// 计算窗口框架    mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe,            win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight,            win.getRequestedVisibilities(), attachedWindowFrame, win.mGlobalScale,            sTmpClientFrames);// ...}

4.3 布局性能优化

为了提高布局性能,Android 14的WMS引入了多种优化策略:

  1. 增量布局

    • 只对需要布局的窗口进行计算
    • 避免不必要的全量布局
  2. 异步布局

    • 将布局计算移到后台线程
    • 减少主线程的阻塞
  3. 布局缓存

    • 缓存布局计算结果
    • 避免重复计算

5. 性能优化建议

5.1 窗口层级优化

  1. 减少窗口层级

    • 避免过多的嵌套窗口
    • 使用扁平化的窗口结构
  2. 合理使用窗口类型

    • 将窗口类型设置为合适的范围
    • 避免使用过高的窗口类型导致排序问题
  3. 控制子窗口数量

    • 限制子窗口的数量
    • 避免复杂的窗口嵌套

5.2 布局性能优化

  1. 减少布局计算

    • 避免频繁的布局请求
    • 使用固定大小窗口
  2. 优化窗口更新

    • 批量更新窗口属性
    • 减少不必要的重绘
  3. 使用硬件加速

    • 启用硬件加速
    • 使用高效的渲染管道

5.3 常见问题及解决方案

  1. 窗口闪烁问题

    • 问题:窗口显示时出现闪烁
    • 解决方案:确保窗口的正确初始化,避免多次布局
  2. 窗口布局问题

    • 问题:窗口大小或位置不正确
    • 解决方案:检查布局参数,确保正确的测量和布局过程
  3. 性能问题

    • 问题:窗口操作卡顿
    • 解决方案:优化布局过程,减少不必要的计算和重绘

6. 总结

Android 14的WMS窗口层级树是一个复杂而高效的数据结构,它负责管理Android系统中的所有窗口。通过深入理解其核心机制和数据结构,我们可以更好地优化应用程序的性能和用户体验。

本文详细分析了WMS窗口层级树的结构、管理机制和布局流程,并提供了性能优化建议和常见问题的解决方案。希望这些内容对您深入理解Android窗口管理系统有所帮助。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-29 17:10:11 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/813415.html
  2. 运行时间 : 0.088413s [ 吞吐率:11.31req/s ] 内存消耗:4,824.30kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1e4a41f143c372c19e41de030e09ba08
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000432s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000791s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000283s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000257s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000512s ]
  6. SELECT * FROM `set` [ RunTime:0.000199s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000509s ]
  8. SELECT * FROM `article` WHERE `id` = 813415 LIMIT 1 [ RunTime:0.000482s ]
  9. UPDATE `article` SET `lasttime` = 1782724211 WHERE `id` = 813415 [ RunTime:0.006575s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000283s ]
  11. SELECT * FROM `article` WHERE `id` < 813415 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000564s ]
  12. SELECT * FROM `article` WHERE `id` > 813415 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000441s ]
  13. SELECT * FROM `article` WHERE `id` < 813415 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001509s ]
  14. SELECT * FROM `article` WHERE `id` < 813415 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000852s ]
  15. SELECT * FROM `article` WHERE `id` < 813415 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000659s ]
0.090104s