summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHuan Song <huans@google.com>2021-05-03 18:34:35 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-05-03 18:34:35 +0000
commit39f0353fc042c3e2bf7d0a17f207b2be56ac86fd (patch)
tree7ed121db77b82cfbcb7d143ee66e19ef7eade150
parenta7644be7a7bbd259cda7626b2bd281fef44a32da (diff)
parent2b30760c19203a943d76b6394f74f86a9e70095b (diff)
downloadvulkan-cereal-39f0353fc042c3e2bf7d0a17f207b2be56ac86fd.tar.gz
multidisplay for gfx stream am: 122405627b am: c77f517650 am: 2b30760c19
Original change: https://android-review.googlesource.com/c/device/generic/vulkan-cereal/+/1692657 Change-Id: I5c57a921dfe1e5f4635fa92a08e5d724a0320143
-rw-r--r--stream-servers/GfxStreamAgents.cpp80
1 files changed, 69 insertions, 11 deletions
diff --git a/stream-servers/GfxStreamAgents.cpp b/stream-servers/GfxStreamAgents.cpp
index b8fef7cd..74c1651f 100644
--- a/stream-servers/GfxStreamAgents.cpp
+++ b/stream-servers/GfxStreamAgents.cpp
@@ -24,10 +24,12 @@
#include "host-common/multi_display_agent.h" // for QAndroidM...
#include "host-common/vm_operations.h" // for SnapshotC...
#include "host-common/window_agent.h" // for WindowMes...
-#include "host-common/misc.h"
+#include "host-common/misc.h"
std::map<uint32_t, android::MultiDisplayInfo> mMultiDisplay;
+using namespace android;
+
static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
.setMultiDisplay = [](uint32_t id,
int32_t x,
@@ -41,8 +43,6 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
"setMultiDisplay (mock): %d, x: %d, y: %d, w: %d, h: %d, "
"dpi: %d, flag: %d\n",
id, x, y, w, h, dpi, flag);
- mMultiDisplay[id] =
- android::MultiDisplayInfo(x, y, w, h, dpi, flag, add);
return 0;
},
.getMultiDisplay = [](uint32_t id,
@@ -52,19 +52,35 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
uint32_t* h,
uint32_t* dpi,
uint32_t* flag,
- bool* enable) -> bool {
+ bool* enabled) -> bool {
fprintf(stderr, "getMultiDisplay (mock) id %u\n", id);
- if (x)
+ if (mMultiDisplay.find(id) == mMultiDisplay.end()) {
+ if (enabled) {
+ *enabled = false;
+ }
+ return false;
+ }
+ if (x) {
*x = mMultiDisplay[id].pos_x;
- if (y)
+ }
+ if (y) {
*y = mMultiDisplay[id].pos_y;
- if (w)
+ }
+ if (w) {
*w = mMultiDisplay[id].width;
- if (h)
+ }
+ if (h) {
*h = mMultiDisplay[id].height;
- if (dpi)
+ }
+ if (dpi) {
*dpi = mMultiDisplay[id].dpi;
-
+ }
+ if (flag) {
+ *flag = mMultiDisplay[id].flag;
+ }
+ if (enabled) {
+ *enabled = mMultiDisplay[id].enabled;
+ }
return true;
},
.getNextMultiDisplay = [](int32_t start_id,
@@ -131,11 +147,37 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
},
.setGpuMode = [](bool isGuestMode, uint32_t w, uint32_t h) {},
.createDisplay = [](uint32_t* displayId) -> int {
+ if (displayId == nullptr) {
+ fprintf(stderr, "null displayId pointer\n");
+ return -1;
+ }
+ if (mMultiDisplay.size() >= MultiDisplay::s_maxNumMultiDisplay) {
+ fprintf(stderr, "cannot create more displays, exceeding limits %d\n",
+ MultiDisplay::s_maxNumMultiDisplay);
+ return -1;
+ }
+ if (mMultiDisplay.find(*displayId) != mMultiDisplay.end()) {
+ return 0;
+ }
+ // displays created by internal rcCommands
+ if (*displayId == MultiDisplay::s_invalidIdMultiDisplay) {
+ for (int i = MultiDisplay::s_displayIdInternalBegin; i < MultiDisplay::s_maxNumMultiDisplay; i++) {
+ if (mMultiDisplay.find(i) == mMultiDisplay.end()) {
+ *displayId = i;
+ break;
+ }
+ }
+ }
+ if (*displayId == MultiDisplay::s_invalidIdMultiDisplay) {
+ fprintf(stderr, "cannot create more internaldisplays, exceeding limits %d\n",
+ MultiDisplay::s_maxNumMultiDisplay - MultiDisplay::s_displayIdInternalBegin);
+ return -1;
+ }
+
mMultiDisplay.emplace(*displayId, android::MultiDisplayInfo());
return 0;
},
.destroyDisplay = [](uint32_t displayId) -> int {
- fprintf(stderr, "destroyDisplay (mock): %d\n", displayId);
mMultiDisplay.erase(displayId);
return 0;
},
@@ -145,6 +187,10 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
uint32_t w,
uint32_t h,
uint32_t dpi) -> int {
+ if (mMultiDisplay.find(displayId) == mMultiDisplay.end()) {
+ fprintf(stderr, "cannot find display %d\n", displayId);
+ return -1;
+ }
mMultiDisplay[displayId].pos_x = x;
mMultiDisplay[displayId].pos_y = y;
mMultiDisplay[displayId].width = w;
@@ -157,6 +203,10 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
int32_t* y,
uint32_t* w,
uint32_t* h) -> int {
+ if (mMultiDisplay.find(displayId) == mMultiDisplay.end()) {
+ fprintf(stderr, "cannot find display %d\n", displayId);
+ return -1;
+ }
if (x)
*x = mMultiDisplay[displayId].pos_x;
if (y)
@@ -169,6 +219,10 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
},
.getDisplayColorBuffer = [](uint32_t displayId,
uint32_t* colorBuffer) -> int {
+ if (mMultiDisplay.find(displayId) == mMultiDisplay.end()) {
+ fprintf(stderr, "cannot find display %d\n", displayId);
+ return -1;
+ }
*colorBuffer = mMultiDisplay[displayId].cb;
return 0;
},
@@ -184,6 +238,10 @@ static const QAndroidMultiDisplayAgent sMultiDisplayAgent = {
},
.setDisplayColorBuffer = [](uint32_t displayId,
uint32_t colorBuffer) -> int {
+ if (mMultiDisplay.find(displayId) == mMultiDisplay.end()) {
+ fprintf(stderr, "cannot find display %d\n", displayId);
+ return -1;
+ }
mMultiDisplay[displayId].cb = colorBuffer;
return 0;
}};