SurfaceFlinger-1-dumpsys SurfaceFlinger 分析
1. 检索 "DisplayDevice" 看当前系统有几个屏幕
如下,可以看到有2个物理屏,一个虚拟屏。
DisplayDevice{129, primary, "Internal display"}
DisplayDevice{130, "External display"}
DisplayDevice{virtual, "XiaoMaVirtualActivity-App-VD"}
2. 检索 "Display 129 HWC layers:" / "Display 130 HWC layers:" 查看各物理屏对应的图层信息
Android 13开始会在TOP图层对应行的最右侧标记一个"*"号。
Display 130 HWC layers: ------------------------------------------------------------------------------------------- Layer name Z | Window Type | Comp Type | Transform | Disp Frame (LTRB) | Source Crop (LTRB) | appPid ------------------------------------------------------------------------------------------- SurfaceView - #0 rel -2 | 0 | CLIENT | 0 | 0 0 1920 532 | 0.0 0.0 1920.0 532.0 | 1802 - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - #1 rel 0 | 2111 | CLIENT | 0 | 0 0 1920 532 | 0.0 0.0 1920.0 532.0 | 1802 - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -
一、简介
二、dump信息解析
基于 A12+Linux-6.1
1. Build configuration
Build configuration: [sf PRESENT_TIME_OFFSET=0 FORCE_HWC_FOR_RBG_TO_YUV=1 MAX_VIRT_DISPLAY_DIM=0 RUNNING_WITHOUT_SYNC_FRAMEWORK=0 NUM_FRAMEBUFFER_SURFACE_BUFFERS=4]
sf:表示 SurfaceFlinger
PRESENT_TIME_OFFSET:垂直同步偏移,用来兼容垂直同步信号误差的(主要指跨进程的通知耗时),单位ns。
FORCE_HWC_FOR_RBG_TO_YUV:强制使用 HWC 进行 RGB 到 YUV 的转换,有助于提高性能。
MAX_VIRT_DISPLAY_DIM:对虚拟 Display 的最大尺寸的限制,创建虚拟 Display 时,其宽或高要在这个范围内,超过的话会创建失败。
RUNNING_WITHOUT_SYNC_FRAMEWORK: 用于保证图形渲染和显示的同步的Sync同步框架是否开启,默认是开启的。
NUM_FRAMEBUFFER_SURFACE_BUFFERS:SurfaceFlinger 中的 BufferQueue,一次申请 Buffer 时可以申请的最大数量为 NUM_FRAMEBUFFER_SURFACE_BUFFERS-1, 比如是4,减去1就是3,是三Buffer机制,默认最高支持63个。如果出现Jank情况下,可以适当调大(但是会更耗时系统资源)
2. Display identification data
Display identification data: Display 4627039422300187648 (HWC display 0): port=0 pnpId=MTK displayName="MTKDEV" Display 4627039422300187649 (HWC display 1): port=1 pnpId=MTK displayName="MTKDEV"
物理显示器信息,表示有两个物理屏。
3. Displays
Displays (3 entries) Display 4627039422300187648 connectionType=Internal colorModes= ColorMode::NATIVE deviceProductInfo={name="MTKDEV", manufacturerPnpId=MTK, productId=35638, manufactureWeek=42, manufactureYear=2021, relativeAddress=[]} name="MTKDEV" powerMode=On activeMode=60.00 Hz (60.00 Hz) displayModes= {id=0, hwcId=0, resolution=2560x1440, refreshRate=60.00 Hz, dpi=160.00x160.00, group=0} displayManagerPolicy={defaultModeId=0, allowGroupSwitching=false, primaryRanges={physical=[0.00 Hz, inf Hz], render=[0.00 Hz, 121.00 Hz]}, appRequestRanges={physical=[0.00 Hz, inf Hz],
render=[0.00 Hz, 121.00 Hz]}} frameRateOverrideConfig=Enabled idleTimer= interval=nullopt controller=Platform Display 4627039422300187649 ... Virtual Display 11529215046679375371 name="scrcpy" powerMode=On
(3 entries) 表示有3个屏幕,不区分是物理屏还是虚拟屏。从下面打印看是有两个物理屏,一个虚拟屏。随后显示的是每个屏幕的信息:
deviceProductInfo 表示屏幕的制造商信息。
powerMode 是否上电。
activeMode 屏幕刷新率
displayModes 屏幕的id,分辨率,刷新率等信息。
虚拟屏直接显示为 Virtual Display, 可以看到其是由 scrcpy 投屏创建的虚拟屏。
4. Wide-Color information
Wide-Color information: Device supports wide color: 1 Device uses color management: 1 DisplayColorSetting: Managed Display 4627039422300187648 color modes: ColorMode::NATIVE (0) Current color mode: ColorMode::NATIVE (0) Display 4627039422300187649 color modes: ColorMode::NATIVE (0) Current color mode: ColorMode::NATIVE (0)
显示器的色域信息,支持广色域、支持色彩管理、设置功能已开启。
当前的颜色模式是 NATIVE,只支持这一种颜色模式(Native)。
广色域是一种色彩背光技术,其色彩覆盖率能达到NSTC(National Television System Committe) 标准的92%及以上。使用广色域,可以让显示器的显示效果更佳鲜艳,但并不是NSTC覆盖标准越高越高,超过人眼的可识别范围的色彩是人类是无法分辨的,人眼识别范围(380~780nm)的光波波长。
5. Sync configuration
Sync configuration: [using: EGL_ANDROID_native_fence_sync EGL_KHR_wait_sync]
这条信息表示,支持 OpenGLES 同步(Sync),使用 EGL_ANDROID_native_fence_sync 和 EGL_KHR_wait_sync 进行同步,确保图形渲染和显示操作的顺序和时间一致性。
6. Visible layers
Visible layers (count = 278) Composition layers * Layer 0xb400007cd5eb3400 (WindowedMagnification:0:31#6) isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false geomLayerTransform (ROT_0) (IDENTITY) geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0 Region transparentRegionHint (this=0xb400007cd5ebd870, count=1) [ 0, 0, 0, 0] geomLayerBounds=[0.000000 0.000000 0.000000 0.000000] shadowRadius=0.000000 blend=INVALID (0) alpha=1.000000 backgroundBlurRadius=0 composition type=INVALID (0) buffer: buffer=0x0 sideband stream=0x0 color=[0.000000 0.000000 0.000000] isOpaque=true hasProtectedContent=false isColorspaceAgnostic=false dataspace=UNKNOWN (0) hdr metadata types=0 dimming enabled=true colorTransform=[[1.000,0.000,0.000,0.000][0.000,1.000,0.000,0.000]
[0.000,0.000,1.000,0.000][0.000,0.000,0.000,1.000]] caching hint=Enabled xpLayerType=0 * Layer 0xb400007cd5eb5000 (HideDisplayCutout:0:16#7) ...
当前显示的图层数目是 278 个.
实测,一个App增加100个图层后,"Visible layers" 从 254 变成 854 了。
7. Scheduler
Scheduler: Features PresentFences=true KernelIdleTimer=false ContentDetection=false Policy pacesetterDisplayId=4627039422300187648 layerHistory={size=270, active=3} touchTimer=nullopt displayPowerTimer=nullopt
Features:
PresentFences=true:启用呈现栅栏,用于同步渲染和显示操作,确保图形帧按顺序显示。
KernelIdleTimer=false:内核空闲定时器未启用,可能会影响系统在空闲时的功耗优化。
ContentDetection=false:内容检测功能未启用,无法根据显示内容自动调整显示设置。
Policy:
pacesetterDisplayId: 指定了主导显示设备的ID, 这里指定的是首个物理屏。
layerHistory: 记录了图层历史信息,大小为 270,其中活跃的有 3 个。
touchTimer 和 displayPowerTimer 未设置。
三、关键信息标识
1. 不同刷新率占比统计
ScreenOff: 0d00:00:00.029 60.00 Hz: 0d00:03:10.357
记录了屏幕关闭的时长以及不同刷新率使用的时长,从数据来看,只有关闭屏幕和60Hz刷新两种状态。
2. 帧率相关
app phase: 1133334 ns SF phase: 1066667 ns app duration: 16600000 ns SF duration: 15600000 ns early app phase: 1133334 ns early SF phase: 1066667 ns early app duration: 16600000 ns early SF duration: 15600000 ns GL early app phase: 1133334 ns GL early SF phase: 1066667 ns GL early app duration: 16600000 ns GL early SF duration: 15600000 ns HWC min duration: 23000000 ns
应用和 SurfaceFlinger 的阶段和持续时间表明,当前的刷新率大致对应 60Hz (16666666 ns 约为 1/60 秒)。
3. 丢帧数
Total missed frame count: 34 HWC missed frame count: 34 GPU missed frame count: 12
总丢帧数量为 34,其中硬件合成器(HWC)丢帧数量和总丢帧数量相同,GPU 丢帧数量为 12。大量的丢帧可能会导致画面卡顿、不流畅。
4. 应用状态
app: state=VSync VSyncState={displayId=4627039422300187648, count=9688}
mWorkDuration=16.60 mReadyDuration=15.60 last vsync time 26.93ms relative to now
pending events (count=0):
connections (count=42):
Connection{0xb400007bf5c76460, VSyncRequest::None}
...
应用处于 VSync 状态,垂直同步状态记录了显示设备ID和计数。
记录了工作时长和准备时长,以及上一次垂直同步时间相对于当前时间的偏移。
没有待处理的事件,有 42 个连接。
11. 硬件垂直同步(HW VSync)状态
VsyncSchedule for pacesetter 4627039422300187648: hwVsyncState=Disabled pendingHwVsyncState=Disabled ... VsyncSchedule for follower 4627039422300187649: hwVsyncState=Disallowed pendingHwVsyncState=Disabled
硬件垂直同步被禁用:系统未使用物理显示控制器的垂直同步信号,可能改用软件同步(如 EGL_KHR_wait_sync)。
12. VsyncController 与栅栏管理
VsyncController: VsyncReactor in use Has 1 unfired fences mInternalIgnoreFences=0 mExternalIgnoreFences=0 mMoreSamplesNeeded=0 mPeriodConfirmationInProgress=0 mPeriodTransitioningTo=nullptr No Last HW vsync
未触发的栅栏(unfired fences):存在 1 个未完成的同步栅栏,可能导致渲染延迟。无硬件 VSync 记录:No Last HW vsync 表明系统未接收到硬件同步信号。
13. VSyncTracker 与刷新率映射
VSyncTracker: mIdealPeriod=16.67 Refresh Rate Map: For ideal period 16.67ms: period = 16.67ms, intercept = 0 For ideal period 11.11ms: period = 11.11ms, intercept = 0 For ideal period 8.33ms: period = 8.33ms, intercept = 0
当前刷新率:60Hz(对应 16.67ms 周期)。高刷新率支持:系统支持 90Hz(11.11ms) 和 120Hz(8.33ms),但未启用。
14. VsyncDispatch 调度与延迟
VsyncDispatch: Timer: DebugState: Waiting mTimerSlack: 0.50ms mMinVsyncDistance: 3.00ms mIntendedWakeupTime: 9223372013568.00ms from now mLastTimerCallback: -9223372013568.00ms ago mLastTimerSchedule: -9223372013568.00ms ago Callbacks: app: [wake up in 11.21ms deadline in 27.81ms for vsync 43.41ms from now] workDuration: 16.60ms readyDuration: 15.60ms earliestVsync: 26.73ms relative to now mLastDispatchTime: -26.73ms ago appSf: workDuration: 16.67ms readyDuration: 15.60ms earliestVsync: -152891.47ms relative to now mLastDispatchTime: 152874.81ms ago sf: workDuration: 15.60ms readyDuration: 0.00ms earliestVsync: -39.99ms relative to now mLastDispatchTime: 6.65ms ago VsyncSchedule for follower 4627039422300187649: hwVsyncState=Disallowed pendingHwVsyncState=Disabled
调度延迟:
SurfaceFlinger (sf):处理时间 15.60ms,接近 60Hz 周期(16.67ms),但 readyDuration=0 表明可能未及时准备下一帧。
应用 (app):工作时长 16.60ms,但 readyDuration=15.60ms 显示应用渲染延迟,可能导致丢帧。
appSf:延迟极长(lastVsync 约 152 秒前),可能由后台应用或系统服务阻塞引起。
15. 图层信息
Visible layers (count = 132) Composition layers * Layer 0xb400007bf5d6d800 (ActivityRecord{2328854 u0 com.android.systemui/.AndroidMainActivity privateFlags=285278212 #97) isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false geomLayerTransform (ROT_0) (IDENTITY) geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0 Region transparentRegionHint (this=0xb400007bf5d0c870, count=1) [ 0, 0, 0, 0] geomLayerBounds=[0.000000 0.000000 0.000000 0.000000] shadowRadius=0.000000 blend=INVALID (0) alpha=1.000000 backgroundBlurRadius=0 composition type=INVALID (0) buffer: buffer=0x0 sideband stream=0x0 color=[0.000000 0.000000 0.000000] isOpaque=true hasProtectedContent=false isColorspaceAgnostic=false dataspace=UNKNOWN (0) hdr metadata types=0 dimming enabled=true colorTransform=[[1.000,0.000,0.000,0.000][0.000,1.000,0.000,0.000]
[0.000,0.000,1.000,0.000][0.000,0.000,0.000,1.000]] caching hint=Enabled
Composition layers: 参与合成的图层。
#97 表示这是一个编号为 97 的图层。
isSecure=false 表示该图层不是安全图层,即不涉及对敏感信息的特殊保护。
geomUsesSourceCrop=false 说明该图层不使用源裁剪,即不会对图层的原始内容进行裁剪操作。
geomBufferUsesDisplayInverseTransform=false 表示图层缓冲区不使用显示的逆变换。
geomLayerTransform (ROT_0) (IDENTITY) 表示图层没有进行旋转(旋转角度为 0),并且是恒等变换,即没有进行缩放、平移等其他变换操作。
geomBufferSize、geomContentCrop 和 geomCrop 的值都为 [0 0 -1 -1],这种表示可能意味着缓冲区大小和裁剪区域未被明确设置或无效。在正常情况下,这些值应该表示实际的尺寸和裁剪范围。
geomBufferTransform=0 表示缓冲区没有进行变换。
透明区域提示:
Region transparentRegionHint 透明区域提示信息,count=1 表示有一个透明区域提示,但其具体内容为 [ 0, 0, 0, 0 ],可能表示该图层没有透明区域。
几何边界与阴影长度:
geomLayerBounds 再次明确了图层的边界。
shadowRadius=0.000000 表示该图层没有阴影。
blend=INVALID (0) 若为 NONE (1) 表示该图层不使用混合模式,即直接显示自身内容,不与其他图层进行混合。
alpha=1.000000 明确该图层完全不透明。
backgroundBlurRadius=0 背景模糊半径,为0表示背景没有模糊效果。
composition type=INVALID (0) 若为 SOLID_COLOR (3) 表示该图层是一个纯色图层。
颜色与其它属性:
color=[0.000000 0.000000 0.000000] 再次确认颜色为黑色
isOpaque=true 再次表示该图层是不透明的
hasProtectedContent=false 表示该图层没有受保护的内容。
isColorspaceAgnostic=false 表示该图层不是颜色空间不可知的。
dataspace=UNKNOWN (0) 若值为 V0_SRGB (142671872) 表示数据空间为 V0_SRGB。
hdr metadata types=0 表示 HDR 元数据类型为 0。
dimming enabled=true 表示调光功能启用。
colorTransform 颜色变换,后面跟的是颜色变换矩阵,只有右斜对角为1表示是单位矩阵,即没有进行颜色变换。
caching hint=Enabled 表示启用了缓存提示。
此外:
检索 Layers 可以看到有每个屏幕有几个硬件图层,比如"8 Layers" "2 Layers"。
图层边界:mBounds=[0.00, 0.00, 2560.00, 1440.00], 定义从坐标 (0, 0) 开始到 (2560, 1440) 的区域。
该图层所属PID: ownerPID:1298
forceClientComposition=false 表示不强制使用GPU进行合成
16. HWC图层核心信息
Display 4627039422300187648 (active) HWC layers: --------------------------------------------------------------------------------------------------------------------------------------------------------------- Layer name Z | Window Type | Comp Type | Transform | Disp Frame (LTRB) | Source Crop (LTRB) | appPid | Frame Rate (Explicit) (Seamlessness) [Focused] --------------------------------------------------------------------------------------------------------------------------------------------------------------- SurfaceView[ScreenWallpaperContainer](BLAST)#166 rel 0 | 0 | DEVICE | 0 | 0 0 2560 1440 | 0.0 0.0 2560.0 1440.0 | 1879 | [ ] --------------------------------------------------------------------------------------------------------------------------------------------------------------- Background for SurfaceView[com.baiu[...].BaiduMap.MapsActivity]#117 rel -2147483648 | 0 | CLIENT | 0 | 0 0 2560 1330 | 0.0 0.0 0.0 0.0 | 2824 | [*] --------------------------------------------------------------------------------------------------------------------------------------------------------------- ...
图层名称与标识:
SurfaceView:百度地图的地图渲染层(BLAST 可能为引擎名称)。ID=117 检索它看到出现了几次。
Z 顺序:
Z=0:数值越大越是较高层级,可能覆盖其他 UI 元素,需注意遮挡问题。
合成类型:
Comp Type=DEVICE 硬件合成(HWC),CLIENT 是GPU合成,硬件合成的性能功耗都好一些。
显示与裁剪区域:
Disp Frame: 0 0 2560 1330
Source Crop: 若与显示区域完全匹配,则表示无缩放或裁剪开销。
帧率与焦点:
Frame Rate (Explicit) 为空表示无显示帧率设置,依赖系统默认刷新率(60Hz)。
[*] 标记:当前聚焦图层,优先处理输入事件。
17. HWC图层与合成分析
7 Layers (DEVICE composition): 1. SurfaceView[com.baidu.BaiduMap] (Z=20) - 尺寸:1080x2328(与屏幕 1080x2376 不完全匹配) - 覆盖区域:[0,0,1080,2328](底部 48px 未覆盖) 2. 系统 UI 层(StatusBar/NavigationBar) - 状态栏:[0,0,1080,120] - 导航栏:[0,2244,1080,2376] 3. 边缘浮窗(OplusOSEdgeFloatBar) - 位置:[1024,238,1080,526](右侧 56px 区域)
图层遮挡:
百度地图图层(Z=20)覆盖了系统导航栏区域(Y=2244-2376),可能导致交互异常。
边缘浮窗(Z=?)可能遮挡地图内容。
裁剪与缩放:
百度地图图层尺寸为 1080x2328,与屏幕 1080x2376 存在 48px 差异,可能引发底部黑边或拉伸。
18. 缓冲区数据流
buffer: buffer=0x0 sideband stream=0x0
buffer=0x0 表示缓冲区为空或未被正确初始化。
sideband stream=0x0 表示边带数据流为空。
19. 显示设备核心参数
Displays (2 entries) Display 4627039422300187648 connectionType=Internal colorModes= ColorMode::NATIVE deviceProductInfo={name="MTKDEV", manufacturerPnpId=MTK, productId=35638, manufactureWeek=42, manufactureYear=2021, relativeAddress=[]} name="MTKDEV" powerMode=On activeMode=60.00 Hz (60.00 Hz) displayModes= {id=0, hwcId=0, resolution=2560x1440, refreshRate=60.00 Hz, dpi=160.00x160.00, group=0} displayManagerPolicy={defaultModeId=0, allowGroupSwitching=false, primaryRanges={physical=[0.00 Hz, inf Hz], render=[0.00 Hz, 121.00 Hz]}, appRequestRanges={physical=[0.00 Hz, inf Hz], render=[0.00
Hz, 121.00 Hz]}} frameRateOverrideConfig=Enabled idleTimer= interval=nullopt controller=Platform
表示此物理屏幕分辨率为 2560x1440,刷新率是 60Hz,还显示了制造商信息。
20. 帧缓冲区与内存管理
Composition RenderSurface State: size=[2560 1440] ANativeWindow=0xb400007bf5c97810 (format 1) FramebufferSurface mDataspace=Default (0) mAbandoned=0 - BufferQueue mMaxAcquiredBufferCount=3 mMaxDequeuedBufferCount=1 mDequeueBufferCannotBlock=0 mAsyncMode=0 mQueueBufferCanDrop=0 mLegacyBufferDrop=1 default-size=[2560x1440] default-format=1 transform-hint=00 frame-counter=6259 mTransformHintInUse=00 mAutoPrerotation=0 FIFO(0): (mConsumerName=FramebufferSurface, mConnectedApi=1, mConsumerUsageBits=6656, mId=36700000000, producer=[871:/system/bin/surfaceflinger], consumer=[871:/system/bin/surfaceflinger]) Slots: >[01:0xb400007bf5c83900] state=ACQUIRED 0xb400007bf5c90a00 frame=6259 [2560x1440:2560, 1] [00:0xb400007bf5c83800] state=FREE 0xb400007bf5c90780 frame=6256 [2560x1440:2560, 1] [03:0xb400007bf5c83b00] state=FREE 0xb400007bf5c90c80 frame=6257 [2560x1440:2560, 1] [02:0xb400007bf5c83a00] state=FREE 0xb400007bf5c90b40 frame=6258 [2560x1440:2560, 1] *BufferQueueDump mIsBackupBufInited=0, mAcquiredBufs(size=1) [00] handle=0xb400007bf5c90a00, fence=0xb400007be3c883b0, time=0x300e36c42c, xform=0x00 FPS ring buffer: (0) 09:07:41.361 fps=40.34 dur=1016.47 max=34.05 min=15.59 (1) 09:07:42.363 fps=39.94 dur=1001.54 max=34.38 min=15.45 (2) 09:07:43.378 fps=40.38 dur=1015.27 max=34.94 min=15.29 (3) 09:07:44.379 fps=39.97 dur=1000.84 max=35.09 min=14.35 (4) 09:07:45.412 fps=39.67 dur=1033.40 max=34.30 min=15.56 (5) 09:07:46.446 fps=40.64 dur=1033.38 max=34.26 min=15.72 (6) 09:07:47.462 fps=40.36 dur=1015.75 max=34.75 min=15.73 (7) 09:07:48.478 fps=40.33 dur=1016.52 max=33.92 min=15.80 (8) 09:07:39.312 fps=39.68 dur=1033.24 max=33.79 min=15.97 (9) 09:07:40.345 fps=39.68 dur=1033.30 max=34.69 min=15.13
缓冲机制:mMaxAcquiredBufferCount=3 表示使用3缓冲区。
缓冲区复用:mLegacyBufferDrop=1 可能导致旧帧被丢弃,引发画面闪烁。
21. 缓存内存占用
RenderEngine AHB/BackendTexture cache size: 61 Dumping buffer ids... - 0x36700000082 - 0x1b7000000003
缓存规模:当前有 61 个纹/缓冲区被 RenderEngine 缓存,用于图形渲染加速。
22. Skia GPU保护缓存
Skia's GPU Protected Caches: 0 bytes, 0.00 bytes (0.00 bytes is purgeable) Skia's Protected Wrapped Objects:
无受保护内容缓存:系统当前未缓存任何受保护的图形资源(如 DRM 视频帧、加密纹理)。
23. ClientCache状态
ClientCache state: Cache owner: 0xb400007bf42090c0 Cache owner: 0xb400007bf42092a0 ID: 12128987643904, size: 2560x1330 ...
三个缓存所有者持有尺寸为 1080x2376 的纹理,可能对应屏幕分辨率。总内存占用约为 1080*2376*4 bytes ≈ 10MB 每个(假设 RGBA_8888),共约 30MB。
四、实现源码
1. dump源码位置
//frameworks/native/cmds/dumpsys/dumpsys.cpp status_t Dumpsys::startDumpThread()
经过IPC,调用到 SurfaceFlinger::doDump() 接口。
参考:
【Android】SurfaceFlinger Dumpsys信息分析:https://blog.csdn.net/zxc024000/article/details/142026465
Android-35-SurfaceFlinger dump信息介绍:https://zhuanlan.zhihu.com/p/30443825591#:~:text=-%20%60FO,%E6%8F%90%E9%AB%98%E6%80%A7%E8%83%BD%E3%80%82
posted on 2023-09-19 16:41 Hello-World3 阅读(1880) 评论(0) 收藏 举报
浙公网安备 33010602011771号