sdm: hwc: Add support for GetVisibleDisplayRect

Support the binder API to get the display visible rectangle
which is the union of all the app layer's displayframe.

Change-Id: I05d750c80dda5b735bac5938410ddeeeb8823dd1
This commit is contained in:
Arun Kumar K.R
2015-09-03 19:47:20 -07:00
committed by Gerrit - the friendly Code Review server
parent cbd56aa4d7
commit 3bd31efc6f
13 changed files with 67 additions and 14 deletions

View File

@@ -47,6 +47,7 @@
#define DLOGE(format, ...) DLOGE_IF(kTagNone, format, ##__VA_ARGS__) #define DLOGE(format, ...) DLOGE_IF(kTagNone, format, ##__VA_ARGS__)
#define DLOGW(format, ...) DLOGW_IF(kTagNone, format, ##__VA_ARGS__) #define DLOGW(format, ...) DLOGW_IF(kTagNone, format, ##__VA_ARGS__)
#define DLOGI(format, ...) DLOGI_IF(kTagNone, format, ##__VA_ARGS__) #define DLOGI(format, ...) DLOGI_IF(kTagNone, format, ##__VA_ARGS__)
#define DLOGV(format, ...) DLOGV_IF(kTagNone, format, ##__VA_ARGS__)
#define DTRACE_BEGIN(custom_string) Debug::Get()->BeginTrace(__CLASS__, __FUNCTION__, custom_string) #define DTRACE_BEGIN(custom_string) Debug::Get()->BeginTrace(__CLASS__, __FUNCTION__, custom_string)
#define DTRACE_END() Debug::Get()->EndTrace() #define DTRACE_END() Debug::Get()->EndTrace()

View File

@@ -29,6 +29,7 @@
#include <cutils/properties.h> #include <cutils/properties.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <utils/debug.h>
#include "cpuhint.h" #include "cpuhint.h"
#include "hwc_debugger.h" #include "hwc_debugger.h"

View File

@@ -32,6 +32,7 @@
#include <gr.h> #include <gr.h>
#include <alloc_controller.h> #include <alloc_controller.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include <core/buffer_allocator.h> #include <core/buffer_allocator.h>
#include "hwc_debugger.h" #include "hwc_debugger.h"

View File

@@ -29,6 +29,7 @@
#include <sync/sync.h> #include <sync/sync.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include "hwc_debugger.h" #include "hwc_debugger.h"
#include "hwc_buffer_sync_handler.h" #include "hwc_buffer_sync_handler.h"

View File

@@ -40,6 +40,7 @@
#include <core/dump_interface.h> #include <core/dump_interface.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include <core/buffer_allocator.h> #include <core/buffer_allocator.h>
#include <private/color_params.h> #include <private/color_params.h>
#include "hwc_buffer_allocator.h" #include "hwc_buffer_allocator.h"

View File

@@ -37,19 +37,6 @@
#include <cutils/log.h> #include <cutils/log.h>
#include <utils/Trace.h> #include <utils/Trace.h>
#define DLOG(Macro, format, ...) Macro(__CLASS__ "::%s: " format, __FUNCTION__, ##__VA_ARGS__)
#define DLOGE(format, ...) DLOG(ALOGE, format, ##__VA_ARGS__)
#define DLOGW(format, ...) DLOG(ALOGW, format, ##__VA_ARGS__)
#define DLOGI(format, ...) DLOG(ALOGI, format, ##__VA_ARGS__)
#define DLOGD(format, ...) DLOG(ALOGI, format, ##__VA_ARGS__)
#define DLOGV(format, ...) DLOG(ALOGV, format, ##__VA_ARGS__)
#define DTRACE_BEGIN(custom_string) HWCDebugHandler::Get()->BeginTrace(__CLASS__, __FUNCTION__, \
custom_string)
#define DTRACE_END() HWCDebugHandler::Get()->EndTrace()
#define DTRACE_SCOPED() ScopeTracer<HWCDebugHandler> scope_tracer(__CLASS__, __FUNCTION__)
namespace sdm { namespace sdm {
class HWCDebugHandler : public DebugHandler { class HWCDebugHandler : public DebugHandler {

View File

@@ -32,6 +32,8 @@
#include <gralloc_priv.h> #include <gralloc_priv.h>
#include <gr.h> #include <gr.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/rect.h>
#include <utils/debug.h>
#include <sync/sync.h> #include <sync/sync.h>
#include <cutils/properties.h> #include <cutils/properties.h>
@@ -477,6 +479,7 @@ int HWCDisplay::PrepareLayerStack(hwc_display_contents_1_t *content_list) {
use_blit_comp_ = false; use_blit_comp_ = false;
metadata_refresh_rate_ = 0; metadata_refresh_rate_ = 0;
display_rect_ = LayerRect();
// Configure each layer // Configure each layer
for (size_t i = 0; i < num_hw_layers; i++) { for (size_t i = 0; i < num_hw_layers; i++) {
@@ -506,6 +509,11 @@ int HWCDisplay::PrepareLayerStack(hwc_display_contents_1_t *content_list) {
} }
SetComposition(hwc_layer.compositionType, &layer.composition); SetComposition(hwc_layer.compositionType, &layer.composition);
if (hwc_layer.compositionType != HWC_FRAMEBUFFER_TARGET) {
display_rect_ = Union(display_rect_, layer.dst_rect);
}
// For dim layers, SurfaceFlinger // For dim layers, SurfaceFlinger
// - converts planeAlpha to per pixel alpha, // - converts planeAlpha to per pixel alpha,
// - sets RGB color to 000, // - sets RGB color to 000,
@@ -1308,6 +1316,21 @@ int HWCDisplay::ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
return ret; return ret;
} }
int HWCDisplay::GetVisibleDisplayRect(hwc_rect_t* visible_rect) {
if (!IsValid(display_rect_)) {
return -EINVAL;
}
visible_rect->left = INT(display_rect_.left);
visible_rect->top = INT(display_rect_.top);
visible_rect->right = INT(display_rect_.right);
visible_rect->bottom = INT(display_rect_.bottom);
DLOGI("Dpy = %d Visible Display Rect(%d %d %d %d)", visible_rect->left, visible_rect->top,
visible_rect->right, visible_rect->bottom);
return 0;
}
void HWCDisplay::ResetLayerCacheStack() { void HWCDisplay::ResetLayerCacheStack() {
uint32_t layer_count = layer_stack_cache_.layer_count; uint32_t layer_count = layer_stack_cache_.layer_count;
for (uint32_t i = 0; i < layer_count; i++) { for (uint32_t i = 0; i < layer_count; i++) {

View File

@@ -76,6 +76,7 @@ class HWCDisplay : public DisplayEventHandler {
int ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload, int ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
PPDisplayAPIPayload *out_payload, PPDisplayAPIPayload *out_payload,
PPPendingParams *pending_action); PPPendingParams *pending_action);
int GetVisibleDisplayRect(hwc_rect_t* rect);
protected: protected:
enum DisplayStatus { enum DisplayStatus {
@@ -186,7 +187,8 @@ class HWCDisplay : public DisplayEventHandler {
bool skip_prepare_ = false; bool skip_prepare_ = false;
bool solid_fill_enable_ = false; bool solid_fill_enable_ = false;
uint32_t solid_fill_color_ = 0;; uint32_t solid_fill_color_ = 0;
LayerRect display_rect_;
private: private:
bool IsFrameBufferScaled(); bool IsFrameBufferScaled();

View File

@@ -29,6 +29,7 @@
#include <cutils/properties.h> #include <cutils/properties.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include "hwc_display_external.h" #include "hwc_display_external.h"
#include "hwc_debugger.h" #include "hwc_debugger.h"

View File

@@ -29,6 +29,7 @@
#include <cutils/properties.h> #include <cutils/properties.h>
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include <stdarg.h> #include <stdarg.h>
#include "hwc_display_primary.h" #include "hwc_display_primary.h"
#include "hwc_debugger.h" #include "hwc_debugger.h"

View File

@@ -28,6 +28,7 @@
*/ */
#include <utils/constants.h> #include <utils/constants.h>
#include <utils/debug.h>
#include <sync/sync.h> #include <sync/sync.h>
#include <stdarg.h> #include <stdarg.h>
#include <gr.h> #include <gr.h>

View File

@@ -41,6 +41,7 @@
#include <gr.h> #include <gr.h>
#include <gralloc_priv.h> #include <gralloc_priv.h>
#include <display_config.h> #include <display_config.h>
#include <utils/debug.h>
#include "hwc_buffer_allocator.h" #include "hwc_buffer_allocator.h"
#include "hwc_buffer_sync_handler.h" #include "hwc_buffer_sync_handler.h"
@@ -610,6 +611,10 @@ android::status_t HWCSession::notifyCallback(uint32_t command, const android::Pa
status = SetPanelBrightness(input_parcel, output_parcel); status = SetPanelBrightness(input_parcel, output_parcel);
break; break;
case qService::IQService::GET_DISPLAY_VISIBLE_REGION:
status = GetVisibleDisplayRect(input_parcel, output_parcel);
break;
default: default:
DLOGW("QService command = %d is not supported", command); DLOGW("QService command = %d is not supported", command);
return -EINVAL; return -EINVAL;
@@ -1204,5 +1209,31 @@ void HWCSession::HandleSecureDisplaySession(hwc_display_contents_1_t **displays)
} }
} }
android::status_t HWCSession::GetVisibleDisplayRect(const android::Parcel *input_parcel,
android::Parcel *output_parcel) {
int dpy = input_parcel->readInt32();
if (dpy < HWC_DISPLAY_PRIMARY || dpy > HWC_DISPLAY_VIRTUAL) {
return android::BAD_VALUE;;
}
if (!hwc_display_[dpy]) {
return android::NO_INIT;
}
hwc_rect_t visible_rect = {0, 0, 0, 0};
int error = hwc_display_[dpy]->GetVisibleDisplayRect(&visible_rect);
if (error < 0) {
return error;
}
output_parcel->writeInt32(visible_rect.left);
output_parcel->writeInt32(visible_rect.top);
output_parcel->writeInt32(visible_rect.right);
output_parcel->writeInt32(visible_rect.bottom);
return android::NO_ERROR;
}
} // namespace sdm } // namespace sdm

View File

@@ -112,6 +112,8 @@ class HWCSession : hwc_composer_device_1_t, public qClient::BnQClient {
android::Parcel *output_parcel); android::Parcel *output_parcel);
android::status_t HandleGetDisplayAttributesForConfig(const android::Parcel *input_parcel, android::status_t HandleGetDisplayAttributesForConfig(const android::Parcel *input_parcel,
android::Parcel *output_parcel); android::Parcel *output_parcel);
android::status_t GetVisibleDisplayRect(const android::Parcel *input_parcel,
android::Parcel *output_parcel);
static Locker locker_; static Locker locker_;
CoreInterface *core_intf_ = NULL; CoreInterface *core_intf_ = NULL;