bool IntelHDMIDisplayDevice::dump(char *buff, int buff_len, int *cur_len) { IntelDisplayPlane *plane = NULL; bool ret = true; int i; mDumpBuf = buff; mDumpBuflen = buff_len; mDumpLen = (int)(*cur_len); if (mLayerList) { dumpPrintf("------------ HDMI Totally %d layers -------------\n", mLayerList->getLayersCount()); for (i = 0; i < mLayerList->getLayersCount(); i++) { plane = mLayerList->getPlane(i); if (plane) { int planeType = plane->getPlaneType(); dumpPrintf(" # layer %d attached to %s plane \n", i, (planeType == 3) ? "overlay" : "sprite"); } else dumpPrintf(" # layer %d goes through eglswapbuffer\n ", i); } dumpPrintf("-------------HDMI runtime parameters -------------\n"); dumpPrintf(" + mHotplugEvent: %d \n", mHotplugEvent); } *cur_len = mDumpLen; return ret; }
bool IntelHWComposer::dumpDisplayStat() { struct drm_psb_register_rw_arg arg; struct drm_psb_vsync_set_arg vsync_arg; int ret; // dump vsync info memset(&vsync_arg, 0, sizeof(struct drm_psb_vsync_set_arg)); vsync_arg.vsync_operation_mask = GET_VSYNC_COUNT; vsync_arg.vsync.pipe = 0; ret = drmCommandWriteRead(mDrm->getDrmFd(), DRM_PSB_VSYNC_SET, &vsync_arg, sizeof(vsync_arg)); if (ret) { ALOGW("%s: failed to dump vsync info %d\n", __func__, ret); goto out; } dumpPrintf("-------------Display Stat -------------------\n"); dumpPrintf(" + last vsync count: %d, timestamp %d ms \n", mVsyncsCount, mVsyncsTimestamp/1000000); dumpPrintf(" + current vsync count: %d, timestamp %d ms \n", vsync_arg.vsync.vsync_count, vsync_arg.vsync.timestamp/1000000); // Read pipe stat register memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); arg.display_read_mask = REGRWBITS_PIPEASTAT; ret = drmCommandWriteRead(mDrm->getDrmFd(), DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); if (ret) { ALOGW("%s: failed to dump display registers %d\n", __func__, ret); goto out; } dumpPrintf(" + PIPEA STAT: 0x%x \n", arg.display.pipestat_a); // Read interrupt mask register memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); arg.display_read_mask = REGRWBITS_INT_MASK; ret = drmCommandWriteRead(mDrm->getDrmFd(), DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); if (ret) { ALOGW("%s: failed to dump display registers %d\n", __func__, ret); goto out; } dumpPrintf(" + INT_MASK_REG: 0x%x \n", arg.display.int_mask); // Read interrupt enable register memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); arg.display_read_mask = REGRWBITS_INT_ENABLE; ret = drmCommandWriteRead(mDrm->getDrmFd(), DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); if (ret) { ALOGW("%s: failed to dump display registers %d\n", __func__, ret); goto out; } dumpPrintf(" + INT_ENABLE_REG: 0x%x \n", arg.display.int_enable); // open this if need to dump all display registers. #if 1 // dump all display regs in driver memset(&arg, 0, sizeof(struct drm_psb_register_rw_arg)); arg.display_read_mask = REGRWBITS_DISPLAY_ALL; ret = drmCommandWriteRead(mDrm->getDrmFd(), DRM_PSB_REGISTER_RW, &arg, sizeof(arg)); if (ret) { ALOGW("%s: failed to dump display registers %d\n", __func__, ret); goto out; } #endif out: return (ret == 0) ? true : false; }