summaryrefslogtreecommitdiff
path: root/opengl/tests/lib/WindowSurface.cpp
diff options
context:
space:
mode:
authorDominik Laskowski <domlaskowski@google.com>2019-11-21 11:14:45 -0800
committerDominik Laskowski <domlaskowski@google.com>2020-01-29 13:59:26 -0800
commit3cb3d4e3906eb43a01464e8862772295dab50f78 (patch)
treebcdf7a4b117cfa538d339c2d806c7e66178f6e1f /opengl/tests/lib/WindowSurface.cpp
parent68d6b2f5a5cd7c749203519fbfd3ae796875657a (diff)
SF: Redesign API to query display information
The DisplayInfo list returned by ISurfaceComposer for display configs contains display information/state redundant across configs. Extract config information to DisplayConfig, and repurpose DisplayInfo for immutable information about a physical display. In a future CL, SF will populate DisplayInfo with additional data (e.g. connection type, EDID fields) on initial connection. DisplayConfigs retain the ability to reload on subsequent connections. Introduce ui::DisplayState for transactional state applicable to both physical and virtual displays. Bug: 144601064 Test: dumpsys display Change-Id: I72003e8ef71483ef483d0de85d28b859a6c9f5fc
Diffstat (limited to 'opengl/tests/lib/WindowSurface.cpp')
-rw-r--r--opengl/tests/lib/WindowSurface.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/opengl/tests/lib/WindowSurface.cpp b/opengl/tests/lib/WindowSurface.cpp
index 4dcc1ca4db..dfb9c92b5f 100644
--- a/opengl/tests/lib/WindowSurface.cpp
+++ b/opengl/tests/lib/WindowSurface.cpp
@@ -16,10 +16,13 @@
#include <WindowSurface.h>
-#include <gui/SurfaceComposerClient.h>
+#include <utility>
+
#include <gui/ISurfaceComposer.h>
#include <gui/Surface.h>
-#include <ui/DisplayInfo.h>
+#include <gui/SurfaceComposerClient.h>
+#include <ui/DisplayConfig.h>
+#include <ui/DisplayState.h>
using namespace android;
@@ -33,28 +36,33 @@ WindowSurface::WindowSurface() {
return;
}
- // Get main display parameters.
- const auto mainDpy = SurfaceComposerClient::getInternalDisplayToken();
- if (mainDpy == nullptr) {
+ const auto displayToken = SurfaceComposerClient::getInternalDisplayToken();
+ if (displayToken == nullptr) {
fprintf(stderr, "ERROR: no display\n");
return;
}
- DisplayInfo mainDpyInfo;
- err = SurfaceComposerClient::getDisplayInfo(mainDpy, &mainDpyInfo);
+ DisplayConfig displayConfig;
+ err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &displayConfig);
+ if (err != NO_ERROR) {
+ fprintf(stderr, "ERROR: unable to get active display config\n");
+ return;
+ }
+
+ ui::DisplayState displayState;
+ err = SurfaceComposerClient::getDisplayState(displayToken, &displayState);
if (err != NO_ERROR) {
- fprintf(stderr, "ERROR: unable to get display characteristics\n");
+ fprintf(stderr, "ERROR: unable to get display state\n");
return;
}
- uint32_t width, height;
- if (mainDpyInfo.orientation != ui::ROTATION_0 && mainDpyInfo.orientation != ui::ROTATION_180) {
- // rotated
- width = mainDpyInfo.h;
- height = mainDpyInfo.w;
- } else {
- width = mainDpyInfo.w;
- height = mainDpyInfo.h;
+ const ui::Size& resolution = displayConfig.resolution;
+ auto width = resolution.getWidth();
+ auto height = resolution.getHeight();
+
+ if (displayState.orientation == ui::ROTATION_90 ||
+ displayState.orientation == ui::ROTATION_270) {
+ std::swap(width, height);
}
sp<SurfaceControl> sc = surfaceComposerClient->createSurface(