Merge "Add lshal debug function to bufferhub"
diff --git a/cmds/atrace/atrace.cpp b/cmds/atrace/atrace.cpp
index 53b3a00..bd3d2d8 100644
--- a/cmds/atrace/atrace.cpp
+++ b/cmds/atrace/atrace.cpp
@@ -99,30 +99,31 @@
/* Tracing categories */
static const TracingCategory k_categories[] = {
- { "gfx", "Graphics", ATRACE_TAG_GRAPHICS, { } },
- { "input", "Input", ATRACE_TAG_INPUT, { } },
- { "view", "View System", ATRACE_TAG_VIEW, { } },
- { "webview", "WebView", ATRACE_TAG_WEBVIEW, { } },
- { "wm", "Window Manager", ATRACE_TAG_WINDOW_MANAGER, { } },
- { "am", "Activity Manager", ATRACE_TAG_ACTIVITY_MANAGER, { } },
- { "sm", "Sync Manager", ATRACE_TAG_SYNC_MANAGER, { } },
- { "audio", "Audio", ATRACE_TAG_AUDIO, { } },
- { "video", "Video", ATRACE_TAG_VIDEO, { } },
- { "camera", "Camera", ATRACE_TAG_CAMERA, { } },
- { "hal", "Hardware Modules", ATRACE_TAG_HAL, { } },
- { "res", "Resource Loading", ATRACE_TAG_RESOURCES, { } },
- { "dalvik", "Dalvik VM", ATRACE_TAG_DALVIK, { } },
- { "rs", "RenderScript", ATRACE_TAG_RS, { } },
- { "bionic", "Bionic C Library", ATRACE_TAG_BIONIC, { } },
- { "power", "Power Management", ATRACE_TAG_POWER, { } },
- { "pm", "Package Manager", ATRACE_TAG_PACKAGE_MANAGER, { } },
- { "ss", "System Server", ATRACE_TAG_SYSTEM_SERVER, { } },
- { "database", "Database", ATRACE_TAG_DATABASE, { } },
- { "network", "Network", ATRACE_TAG_NETWORK, { } },
- { "adb", "ADB", ATRACE_TAG_ADB, { } },
- { "vibrator", "Vibrator", ATRACE_TAG_VIBRATOR, { } },
- { "aidl", "AIDL calls", ATRACE_TAG_AIDL, { } },
- { "nnapi", "NNAPI", ATRACE_TAG_NNAPI, { } },
+ { "gfx", "Graphics", ATRACE_TAG_GRAPHICS, { } },
+ { "input", "Input", ATRACE_TAG_INPUT, { } },
+ { "view", "View System", ATRACE_TAG_VIEW, { } },
+ { "webview", "WebView", ATRACE_TAG_WEBVIEW, { } },
+ { "wm", "Window Manager", ATRACE_TAG_WINDOW_MANAGER, { } },
+ { "am", "Activity Manager", ATRACE_TAG_ACTIVITY_MANAGER, { } },
+ { "sm", "Sync Manager", ATRACE_TAG_SYNC_MANAGER, { } },
+ { "audio", "Audio", ATRACE_TAG_AUDIO, { } },
+ { "video", "Video", ATRACE_TAG_VIDEO, { } },
+ { "camera", "Camera", ATRACE_TAG_CAMERA, { } },
+ { "hal", "Hardware Modules", ATRACE_TAG_HAL, { } },
+ { "res", "Resource Loading", ATRACE_TAG_RESOURCES, { } },
+ { "dalvik", "Dalvik VM", ATRACE_TAG_DALVIK, { } },
+ { "rs", "RenderScript", ATRACE_TAG_RS, { } },
+ { "bionic", "Bionic C Library", ATRACE_TAG_BIONIC, { } },
+ { "power", "Power Management", ATRACE_TAG_POWER, { } },
+ { "pm", "Package Manager", ATRACE_TAG_PACKAGE_MANAGER, { } },
+ { "ss", "System Server", ATRACE_TAG_SYSTEM_SERVER, { } },
+ { "database", "Database", ATRACE_TAG_DATABASE, { } },
+ { "network", "Network", ATRACE_TAG_NETWORK, { } },
+ { "adb", "ADB", ATRACE_TAG_ADB, { } },
+ { "vibrator", "Vibrator", ATRACE_TAG_VIBRATOR, { } },
+ { "aidl", "AIDL calls", ATRACE_TAG_AIDL, { } },
+ { "nnapi", "NNAPI", ATRACE_TAG_NNAPI, { } },
+ { "rro", "Runtime Resource Overlay", ATRACE_TAG_RRO, { } },
{ k_coreServiceCategory, "Core services", 0, { } },
{ k_pdxServiceCategory, "PDX services", 0, { } },
{ "sched", "CPU Scheduling", 0, {
diff --git a/include/OWNERS b/include/OWNERS
index 82ae4cf..22be776 100644
--- a/include/OWNERS
+++ b/include/OWNERS
@@ -1,17 +1,14 @@
alexeykuzmin@google.com
-brianderson@google.com
dangittik@google.com
lajos@google.com
mathias@google.com
michaelwr@google.com
-olv@google.com
-pceballos@google.com
-pengxu@google.com
racarr@google.com
-romainguy@google.com
-ronghuawu@google.com
-sadmac@google.com
+romainguy@android.com
santoscordon@google.com
stoza@google.com
svv@google.com
-wiley@google.com
+
+# For multinetwork.h only.
+lorenzo@google.com
+
diff --git a/include/android/multinetwork.h b/include/android/multinetwork.h
index fa7d908..05d96ff 100644
--- a/include/android/multinetwork.h
+++ b/include/android/multinetwork.h
@@ -112,26 +112,43 @@
#if __ANDROID_API__ >= 29
+enum ResNsendFlags : uint32_t {
+ // Send a single request to a single resolver and fail on timeout or network errors
+ ANDROID_RESOLV_NO_RETRY = 1 << 0,
+
+ // Do not cache the result of the lookup. The lookup may return a result that is already
+ // in the cache, unless the ANDROID_RESOLV_NO_CACHE_LOOKUP flag is also specified.
+ ANDROID_RESOLV_NO_CACHE_STORE = 1 << 1,
+
+ // Don't lookup the request in cache, do not write back the response into the cache
+ ANDROID_RESOLV_NO_CACHE_LOOKUP = 1 << 2,
+};
+
/**
* Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated
* with Domain Name |dname| on the given |network|.
* The typical value for |ns_class| is ns_c_in, while |type| can be any
* record type (for instance, ns_t_aaaa or ns_t_txt).
+ * |flags| is a additional config to control actual querying behavior, see
+ * ResNsendFlags for detail.
*
* Returns a file descriptor to watch for read events, or a negative
* POSIX error code (see errno.h) if an immediate error occurs.
*/
int android_res_nquery(net_handle_t network,
- const char *dname, int ns_class, int ns_type) __INTRODUCED_IN(29);
+ const char *dname, int ns_class, int ns_type,
+ enum ResNsendFlags flags) __INTRODUCED_IN(29);
/**
* Issue the query |msg| on the given |network|.
+ * |flags| is a additional config to control actual querying behavior, see
+ * ResNsendFlags for detail.
*
* Returns a file descriptor to watch for read events, or a negative
* POSIX error code (see errno.h) if an immediate error occurs.
*/
int android_res_nsend(net_handle_t network,
- const uint8_t *msg, size_t msglen) __INTRODUCED_IN(29);
+ const uint8_t *msg, size_t msglen, enum ResNsendFlags flags) __INTRODUCED_IN(29);
/**
* Read a result for the query associated with the |fd| descriptor.
diff --git a/include/input/IInputFlinger.h b/include/input/IInputFlinger.h
index 610834d..ff443c6 100644
--- a/include/input/IInputFlinger.h
+++ b/include/input/IInputFlinger.h
@@ -36,7 +36,7 @@
DECLARE_META_INTERFACE(InputFlinger)
virtual void setInputWindows(const Vector<InputWindowInfo>& inputHandles) = 0;
-
+ virtual void transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) = 0;
virtual void registerInputChannel(const sp<InputChannel>& channel) = 0;
virtual void unregisterInputChannel(const sp<InputChannel>& channel) = 0;
};
@@ -50,7 +50,8 @@
enum {
SET_INPUT_WINDOWS_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
REGISTER_INPUT_CHANNEL_TRANSACTION,
- UNREGISTER_INPUT_CHANNEL_TRANSACTION
+ UNREGISTER_INPUT_CHANNEL_TRANSACTION,
+ TRANSFER_TOUCH_FOCUS
};
virtual status_t onTransact(uint32_t code, const Parcel& data,
diff --git a/libs/gui/tests/EndToEndNativeInputTest.cpp b/libs/gui/tests/EndToEndNativeInputTest.cpp
index 60542bd..7fc69ff 100644
--- a/libs/gui/tests/EndToEndNativeInputTest.cpp
+++ b/libs/gui/tests/EndToEndNativeInputTest.cpp
@@ -133,6 +133,27 @@
EXPECT_EQ(AMOTION_EVENT_ACTION_UP, mev->getAction());
}
+ void expectMotionEvent(int motionEventType, int x, int y) {
+ InputEvent *ev = consumeEvent();
+ ASSERT_NE(ev, nullptr);
+ ASSERT_EQ(ev->getType(), AINPUT_EVENT_TYPE_MOTION);
+ MotionEvent *mev = static_cast<MotionEvent *>(ev);
+ EXPECT_EQ(motionEventType, mev->getAction());
+ EXPECT_EQ(x, mev->getX(0));
+ EXPECT_EQ(y, mev->getY(0));
+ }
+
+ void expectNoMotionEvent(int motionEventType) {
+ InputEvent *ev = consumeEvent();
+ if (ev == nullptr || ev->getType() != AINPUT_EVENT_TYPE_MOTION) {
+ // Didn't find an event or a motion event so assume action didn't occur.
+ return;
+ }
+
+ MotionEvent *mev = static_cast<MotionEvent *>(ev);
+ EXPECT_NE(motionEventType, mev->getAction());
+ }
+
~InputSurface() {
mInputFlinger->unregisterInputChannel(mServerChannel);
}
@@ -255,6 +276,15 @@
}
}
+void injectMotionEvent(std::string event, int x, int y) {
+ char *buf1, *buf2;
+ asprintf(&buf1, "%d", x);
+ asprintf(&buf2, "%d", y);
+ if (fork() == 0) {
+ execlp("input", "input", "motionevent", event.c_str(), buf1, buf2, NULL);
+ }
+}
+
TEST_F(InputSurfacesTest, can_receive_input) {
std::unique_ptr<InputSurface> surface = makeSurface(100, 100);
surface->showAt(100, 100);
@@ -439,5 +469,25 @@
injectTap(11, 11);
bgSurface->expectTap(1, 1);
}
+
+TEST_F(InputSurfacesTest, transfer_touch_focus) {
+ std::unique_ptr<InputSurface> fromSurface = makeSurface(100, 100);
+
+ fromSurface->showAt(10, 10);
+ injectMotionEvent("DOWN", 11, 11);
+ fromSurface->expectMotionEvent(AMOTION_EVENT_ACTION_DOWN, 1, 1);
+
+ std::unique_ptr<InputSurface> toSurface = makeSurface(100, 100);
+ toSurface->showAt(10, 10);
+
+ sp<IBinder> fromToken = fromSurface->mServerChannel->getToken();
+ sp<IBinder> toToken = toSurface->mServerChannel->getToken();
+ SurfaceComposerClient::Transaction t;
+ t.transferTouchFocus(fromToken, toToken).apply(true);
+
+ injectMotionEvent("UP", 11, 11);
+ toSurface->expectMotionEvent(AMOTION_EVENT_ACTION_UP, 1, 1);
+ fromSurface->expectNoMotionEvent(AMOTION_EVENT_ACTION_UP);
+}
}
}
diff --git a/libs/input/IInputFlinger.cpp b/libs/input/IInputFlinger.cpp
index 139570a..acf40bc 100644
--- a/libs/input/IInputFlinger.cpp
+++ b/libs/input/IInputFlinger.cpp
@@ -42,6 +42,16 @@
IBinder::FLAG_ONEWAY);
}
+ virtual void transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) {
+ Parcel data, reply;
+ data.writeInterfaceToken(IInputFlinger::getInterfaceDescriptor());
+
+ data.writeStrongBinder(fromToken);
+ data.writeStrongBinder(toToken);
+ remote()->transact(BnInputFlinger::TRANSFER_TOUCH_FOCUS, data, &reply,
+ IBinder::FLAG_ONEWAY);
+ }
+
virtual void registerInputChannel(const sp<InputChannel>& channel) {
Parcel data, reply;
data.writeInterfaceToken(IInputFlinger::getInterfaceDescriptor());
@@ -90,6 +100,13 @@
unregisterInputChannel(channel);
break;
}
+ case TRANSFER_TOUCH_FOCUS: {
+ CHECK_INTERFACE(IInputFlinger, data, reply);
+ sp<IBinder> fromToken = data.readStrongBinder();
+ sp<IBinder> toToken = data.readStrongBinder();
+ transferTouchFocus(fromToken, toToken);
+ break;
+ }
default:
return BBinder::onTransact(code, data, reply, flags);
}
diff --git a/opengl/libs/Android.bp b/opengl/libs/Android.bp
index 25958e2..c80b79a 100644
--- a/opengl/libs/Android.bp
+++ b/opengl/libs/Android.bp
@@ -208,7 +208,6 @@
defaults: ["gles_libs_defaults"],
srcs: ["GLES2/gl2.cpp"],
cflags: ["-DLOG_TAG=\"libGLESv2\""],
- version_script: "libGLESv2.map.txt",
}
//##############################################################################
@@ -219,5 +218,4 @@
defaults: ["gles_libs_defaults"],
srcs: ["GLES2/gl2.cpp"],
cflags: ["-DLOG_TAG=\"libGLESv3\""],
- version_script: "libGLESv3.map.txt",
}
diff --git a/opengl/libs/libGLESv1_CM.map.txt b/opengl/libs/libGLESv1_CM.map.txt
index 41bf4ca..8ba91e6 100644
--- a/opengl/libs/libGLESv1_CM.map.txt
+++ b/opengl/libs/libGLESv1_CM.map.txt
@@ -179,7 +179,6 @@
glLoadPaletteFromModelViewMatrixOES;
glLogicOp;
glMapBufferOES;
- glMapBufferRangeEXT;
glMaterialf;
glMaterialfv;
glMaterialx;
diff --git a/opengl/libs/libGLESv2.map.txt b/opengl/libs/libGLESv2.map.txt
index 844d1e2..787c835 100644
--- a/opengl/libs/libGLESv2.map.txt
+++ b/opengl/libs/libGLESv2.map.txt
@@ -1,28 +1,19 @@
LIBGLESV2 {
global:
- glActiveShaderProgramEXT;
glActiveTexture;
glAttachShader;
- glBeginQueryEXT;
glBeginPerfMonitorAMD;
glBindAttribLocation;
glBindBuffer;
- glBindFragDataLocationEXT; # introduced=24
- glBindFragDataLocationIndexedEXT; # introduced=24
glBindFramebuffer;
- glBindProgramPipelineEXT;
glBindRenderbuffer;
glBindTexture;
glBindVertexArrayOES; # introduced-mips=9 introduced-x86=9
glBlendColor;
glBlendEquation;
- glBlendEquationiOES; # introduced=24
glBlendEquationSeparate;
- glBlendEquationSeparateiOES; # introduced=24
glBlendFunc;
- glBlendFunciOES; # introduced=24
glBlendFuncSeparate;
- glBlendFuncSeparateiOES; # introduced=24
glBufferData;
glBufferSubData;
glCheckFramebufferStatus;
@@ -31,7 +22,6 @@
glClearDepthf;
glClearStencil;
glColorMask;
- glColorMaskiOES; # introduced=24
glCompileShader;
glCompressedTexImage2D;
glCompressedTexImage3DOES;
@@ -44,16 +34,12 @@
glCoverageOperationNV; # introduced-mips=9 introduced-x86=9
glCreateProgram;
glCreateShader;
- glCreateShaderProgramvEXT;
glCullFace;
- glDebugMessageCallbackKHR; # introduced=21
glDeleteBuffers;
glDeleteFencesNV;
glDeleteFramebuffers;
glDeletePerfMonitorsAMD;
glDeleteProgram;
- glDeleteProgramPipelinesEXT;
- glDeleteQueriesEXT;
glDeleteRenderbuffers;
glDeleteShader;
glDeleteTextures;
@@ -63,32 +49,17 @@
glDepthRangef;
glDetachShader;
glDisable;
- glDisableiOES; # introduced=24
glDisableDriverControlQCOM;
glDisableVertexAttribArray;
glDiscardFramebufferEXT; # introduced-mips=9 introduced-x86=9
glDrawArrays;
- glDrawArraysInstancedBaseInstanceEXT; # introduced=24
- glDrawArraysInstancedEXT; # introduced=21
- glDrawBuffersEXT; # introduced=21
- glDrawBuffersIndexedEXT; # introduced=21
glDrawElements;
- glDrawElementsBaseVertexEXT; # introduced=24
- glDrawElementsBaseVertexOES; # introduced=24
- glDrawElementsInstancedBaseInstanceEXT; # introduced=24
- glDrawElementsInstancedBaseVertexEXT; # introduced=24
- glDrawElementsInstancedBaseVertexOES; # introduced=24
- glDrawElementsInstancedBaseVertexBaseInstanceEXT; # introduced=24
- glDrawRangeElementsBaseVertexEXT; # introduced=24
- glDrawRangeElementsBaseVertexOES; # introduced=24
glEGLImageTargetRenderbufferStorageOES;
glEGLImageTargetTexture2DOES;
glEnable;
- glEnableiOES; # introduced=24
glEnableDriverControlQCOM;
glEnableVertexAttribArray;
glEndPerfMonitorAMD;
- glEndQueryEXT;
glEndTilingQCOM; # introduced-mips=9 introduced-x86=9
glExtGetBufferPointervQCOM; # introduced-mips=9 introduced-x86=9
glExtGetBuffersQCOM; # introduced-mips=9 introduced-x86=9
@@ -105,20 +76,17 @@
glFinish;
glFinishFenceNV;
glFlush;
- glFlushMappedBufferRangeEXT; # introduced=21
glFramebufferRenderbuffer;
glFramebufferTexture2D;
glFramebufferTexture2DMultisampleIMG; # introduced-mips=9 introduced-x86=9
glFramebufferTexture2DMultisampleEXT; # introduced=28
glFramebufferTexture3DOES;
- glFramebufferTextureOES; # introduced=24
glFrontFace;
glGenBuffers;
glGenFencesNV;
glGenFramebuffers;
glGenPerfMonitorsAMD;
glGenRenderbuffers;
- glGenQueriesEXT;
glGenTextures;
glGenVertexArraysOES; # introduced-mips=9 introduced-x86=9
glGenerateMipmap;
@@ -134,49 +102,24 @@
glGetError;
glGetFenceivNV;
glGetFloatv;
- glGetFragDataIndexEXT; # introduced=24
glGetFramebufferAttachmentParameteriv;
- glGetGraphicsResetStatusEXT;
- glGetGraphicsResetStatusKHR; # introduced=24
- glGetIntegeri_vEXT; # introduced=21
glGetIntegerv;
- glGetnUniformfvEXT;
- glGetnUniformfvKHR; # introduced=24
- glGetnUniformivEXT;
- glGetnUniformivKHR; # introduced=24
- glGetnUniformuivKHR; # introduced=24
- glGetObjectLabelEXT;
- glCopyImageSubDataOES; # introduced=24
glGetPerfMonitorCounterDataAMD;
glGetPerfMonitorCounterInfoAMD;
glGetPerfMonitorCounterStringAMD;
glGetPerfMonitorCountersAMD;
glGetPerfMonitorGroupStringAMD;
glGetPerfMonitorGroupsAMD;
- glGetPointervKHR; # introduced=21
glGetProgramBinaryOES;
glGetProgramInfoLog;
glGetProgramiv;
- glGenProgramPipelinesEXT;
- glGetProgramPipelineInfoLogEXT;
- glGetProgramPipelineivEXT;
- glGetProgramResourceLocationIndexEXT; # introduced=24
- glGetQueryivEXT;
- glGetQueryObjectivEXT; # introduced=21
- glGetQueryObjectuivEXT;
- glGetQueryObjecti64vEXT; # introduced=21
- glGetQueryObjectui64vEXT; # introduced=21
glGetRenderbufferParameteriv;
- glGetSamplerParameterIivOES; # introduced=24
- glGetSamplerParameterIuivOES; # introduced=24
glGetShaderInfoLog;
glGetShaderPrecisionFormat;
glGetShaderSource;
glGetShaderiv;
glGetString;
glGetTexParameterfv;
- glGetTexParameterIivOES; # introduced=24
- glGetTexParameterIuivOES; # introduced=24
glGetTexParameteriv;
glGetUniformLocation;
glGetUniformfv;
@@ -185,83 +128,29 @@
glGetVertexAttribfv;
glGetVertexAttribiv;
glHint;
- glInsertEventMarkerEXT;
glIsBuffer;
glIsEnabled;
- glIsEnablediOES; # introduced=24
glIsFenceNV;
glIsFramebuffer;
glIsProgram;
- glIsProgramPipelineEXT;
- glIsQueryEXT;
glIsRenderbuffer;
glIsShader;
glIsTexture;
glIsVertexArrayOES; # introduced-mips=9 introduced-x86=9
- glLabelObjectEXT;
glLineWidth;
glLinkProgram;
glMapBufferOES;
glMultiDrawArraysEXT; # introduced-mips=9 introduced-x86=9
- glMultiDrawArraysIndirectEXT; # introduced=24
- glMultiDrawElementsIndirectEXT; # introduced=24
- glMultiDrawElementsBaseVertexEXT; # introduced=24
- glDrawElementsInstancedEXT; # introduced=21
glMultiDrawElementsEXT; # introduced-mips=9 introduced-x86=9
- glPatchParameteriOES; # introduced=24
glPixelStorei;
glPolygonOffset;
- glPopGroupMarkerEXT; # introduced=21
- glPrimitiveBoundingBoxOES; # introduced=24
glProgramBinaryOES;
- glProgramParameteriEXT;
- glProgramUniform1fEXT;
- glProgramUniform1fvEXT;
- glProgramUniform1iEXT;
- glProgramUniform1ivEXT;
- glProgramUniform1uiEXT; # introduced=21
- glProgramUniform1uivEXT; # introduced=21
- glProgramUniform2fEXT;
- glProgramUniform2fvEXT;
- glProgramUniform2iEXT;
- glProgramUniform2ivEXT;
- glProgramUniform2uiEXT; # introduced=21
- glProgramUniform2uivEXT; # introduced=21
- glProgramUniform3fEXT;
- glProgramUniform3fvEXT;
- glProgramUniform3iEXT;
- glProgramUniform3ivEXT;
- glProgramUniform3uiEXT; # introduced=21
- glProgramUniform3uivEXT; # introduced=21
- glProgramUniform4fEXT;
- glProgramUniform4fvEXT;
- glProgramUniform4iEXT;
- glProgramUniform4ivEXT;
- glProgramUniform4uiEXT; # introduced=21
- glProgramUniform4uivEXT; # introduced=21
- glProgramUniformMatrix2fvEXT;
- glProgramUniformMatrix2x3fvEXT; # introduced=21
- glProgramUniformMatrix2x4fvEXT; # introduced=21
- glProgramUniformMatrix3fvEXT;
- glProgramUniformMatrix3x2fvEXT; # introduced=21
- glProgramUniformMatrix3x4fvEXT; # introduced=21
- glProgramUniformMatrix4fvEXT;
- glProgramUniformMatrix4x2fvEXT; # introduced=21
- glProgramUniformMatrix4x3fvEXT; # introduced=21
- glPushGroupMarkerEXT;
- glQueryCounterEXT; # introduced=21
- glRasterSamplesEXT; # introduced=24
- glReadBufferIndexedEXT; # introduced=21
- glReadnPixelsEXT;
- glReadnPixelsKHR; # introduced=24
glReadPixels;
glReleaseShaderCompiler;
glRenderbufferStorage;
glRenderbufferStorageMultisampleEXT; # introduced=28
glRenderbufferStorageMultisampleIMG; # introduced-mips=9 introduced-x86=9
glSampleCoverage;
- glSamplerParameterIivOES; # introduced=24
- glSamplerParameterIuivOES; # introduced=24
glScissor;
glSelectPerfMonitorCountersAMD;
glSetFenceNV;
@@ -275,27 +164,14 @@
glStencilOp;
glStencilOpSeparate;
glTestFenceNV;
- glTexBufferOES; # introduced=24
- glTexBufferRangeOES; # introduced=24
glTexImage2D;
glTexImage3DOES;
- glTexPageCommitmentEXT; # introduced=24
glTexParameterf;
glTexParameterfv;
glTexParameteri;
- glTexParameterIivOES; # introduced=24
- glTexParameterIuivOES; # introduced=24
glTexParameteriv;
- glTexStorage1DEXT;
- glTexStorage2DEXT;
- glTexStorage3DEXT;
glTexSubImage2D;
glTexSubImage3DOES;
- glTextureStorage1DEXT;
- glTextureStorage2DEXT;
- glTextureStorage3DEXT;
- glTextureViewEXT; # introduced=21
- glTextureViewOES; # introduced=24
glUniform1f;
glUniform1fv;
glUniform1i;
@@ -317,11 +193,7 @@
glUniformMatrix4fv;
glUnmapBufferOES;
glUseProgram;
- glUseProgramStagesEXT;
glValidateProgram;
- glValidateProgramPipelineEXT;
- glVertexAttribDivisorANGLE; # introduced=21
- glVertexAttribDivisorEXT; # introduced=21
glVertexAttrib1f;
glVertexAttrib1fv;
glVertexAttrib2f;
diff --git a/services/inputflinger/InputDispatcher.cpp b/services/inputflinger/InputDispatcher.cpp
index 6173452..7997928 100644
--- a/services/inputflinger/InputDispatcher.cpp
+++ b/services/inputflinger/InputDispatcher.cpp
@@ -2386,7 +2386,8 @@
}
InputTarget target;
- sp<InputWindowHandle> windowHandle = getWindowHandleLocked(connection->inputChannel);
+ sp<InputWindowHandle> windowHandle = getWindowHandleLocked(
+ connection->inputChannel->getToken());
if (windowHandle != nullptr) {
const InputWindowInfo* windowInfo = windowHandle->getInfo();
target.xOffset = -windowInfo->frameLeft;
@@ -3024,13 +3025,13 @@
}
sp<InputWindowHandle> InputDispatcher::getWindowHandleLocked(
- const sp<InputChannel>& inputChannel) const {
+ const sp<IBinder>& windowHandleToken) const {
for (auto& it : mWindowHandlesByDisplay) {
const Vector<sp<InputWindowHandle>> windowHandles = it.second;
size_t numWindows = windowHandles.size();
for (size_t i = 0; i < numWindows; i++) {
const sp<InputWindowHandle>& windowHandle = windowHandles.itemAt(i);
- if (windowHandle->getToken() == inputChannel->getToken()) {
+ if (windowHandle->getToken() == windowHandleToken) {
return windowHandle;
}
}
@@ -3375,27 +3376,30 @@
bool InputDispatcher::transferTouchFocus(const sp<InputChannel>& fromChannel,
const sp<InputChannel>& toChannel) {
+ return transferTouchFocus(fromChannel->getToken(), toChannel->getToken());
+}
+
+bool InputDispatcher::transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) {
+ if (fromToken == toToken) {
#if DEBUG_FOCUS
- ALOGD("transferTouchFocus: fromChannel=%s, toChannel=%s",
- fromChannel->getName().c_str(), toChannel->getName().c_str());
+ ALOGD("Trivial transfer to same window.");
#endif
+ return true;
+ }
+
{ // acquire lock
AutoMutex _l(mLock);
- sp<InputWindowHandle> fromWindowHandle = getWindowHandleLocked(fromChannel);
- sp<InputWindowHandle> toWindowHandle = getWindowHandleLocked(toChannel);
+ sp<InputWindowHandle> fromWindowHandle = getWindowHandleLocked(fromToken);
+ sp<InputWindowHandle> toWindowHandle = getWindowHandleLocked(toToken);
+#if DEBUG_FOCUS
+ ALOGD("transferTouchFocus: fromWindowHandle=%s, toWindowHandle=%s",
+ fromWindowHandle->getName().c_str(), toWindowHandle->getName().c_str());
+#endif
if (fromWindowHandle == nullptr || toWindowHandle == nullptr) {
-#if DEBUG_FOCUS
- ALOGD("Cannot transfer focus because from or to window not found.");
-#endif
+ ALOGW("Cannot transfer focus because from or to window not found.");
return false;
}
- if (fromWindowHandle == toWindowHandle) {
-#if DEBUG_FOCUS
- ALOGD("Trivial transfer to same window.");
-#endif
- return true;
- }
if (fromWindowHandle->getInfo()->displayId != toWindowHandle->getInfo()->displayId) {
#if DEBUG_FOCUS
ALOGD("Cannot transfer focus because windows are on different displays.");
@@ -3433,6 +3437,9 @@
return false;
}
+
+ sp<InputChannel> fromChannel = getInputChannelLocked(fromToken);
+ sp<InputChannel> toChannel = getInputChannelLocked(toToken);
ssize_t fromConnectionIndex = getConnectionIndexLocked(fromChannel);
ssize_t toConnectionIndex = getConnectionIndexLocked(toChannel);
if (fromConnectionIndex >= 0 && toConnectionIndex >= 0) {
diff --git a/services/inputflinger/InputDispatcher.h b/services/inputflinger/InputDispatcher.h
index 7e6de6a..970632e 100644
--- a/services/inputflinger/InputDispatcher.h
+++ b/services/inputflinger/InputDispatcher.h
@@ -343,11 +343,12 @@
*/
virtual void setInputFilterEnabled(bool enabled) = 0;
- /* Transfers touch focus from the window associated with one channel to the
- * window associated with the other channel.
+ /* Transfers touch focus from one window to another window.
*
* Returns true on success. False if the window did not actually have touch focus.
*/
+ virtual bool transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) = 0;
+
virtual bool transferTouchFocus(const sp<InputChannel>& fromChannel,
const sp<InputChannel>& toChannel) = 0;
@@ -414,6 +415,7 @@
virtual void setInputDispatchMode(bool enabled, bool frozen);
virtual void setInputFilterEnabled(bool enabled);
+ virtual bool transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken);
virtual bool transferTouchFocus(const sp<InputChannel>& fromChannel,
const sp<InputChannel>& toChannel);
@@ -995,7 +997,7 @@
std::unordered_map<int32_t, Vector<sp<InputWindowHandle>>> mWindowHandlesByDisplay;
// Get window handles by display, return an empty vector if not found.
Vector<sp<InputWindowHandle>> getWindowHandlesLocked(int32_t displayId) const;
- sp<InputWindowHandle> getWindowHandleLocked(const sp<InputChannel>& inputChannel) const;
+ sp<InputWindowHandle> getWindowHandleLocked(const sp<IBinder>& windowHandleToken) const;
sp<InputChannel> getInputChannelLocked(const sp<IBinder>& windowToken) const;
bool hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle) const;
diff --git a/services/inputflinger/InputManager.cpp b/services/inputflinger/InputManager.cpp
index 15d8070..1d7ea00 100644
--- a/services/inputflinger/InputManager.cpp
+++ b/services/inputflinger/InputManager.cpp
@@ -111,6 +111,10 @@
}
}
+void InputManager::transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken) {
+ mDispatcher->transferTouchFocus(fromToken, toToken);
+}
+
// Used by tests only.
void InputManager::registerInputChannel(const sp<InputChannel>& channel) {
IPCThreadState* ipc = IPCThreadState::self();
diff --git a/services/inputflinger/InputManager.h b/services/inputflinger/InputManager.h
index 8f7551e..ab309b1 100644
--- a/services/inputflinger/InputManager.h
+++ b/services/inputflinger/InputManager.h
@@ -91,6 +91,7 @@
virtual sp<InputDispatcherInterface> getDispatcher();
virtual void setInputWindows(const Vector<InputWindowInfo>& handles);
+ virtual void transferTouchFocus(const sp<IBinder>& fromToken, const sp<IBinder>& toToken);
virtual void registerInputChannel(const sp<InputChannel>& channel);
virtual void unregisterInputChannel(const sp<InputChannel>& channel);
diff --git a/services/inputflinger/host/InputFlinger.h b/services/inputflinger/host/InputFlinger.h
index 82ff089..9d0be95 100644
--- a/services/inputflinger/host/InputFlinger.h
+++ b/services/inputflinger/host/InputFlinger.h
@@ -40,6 +40,7 @@
virtual status_t dump(int fd, const Vector<String16>& args);
void setInputWindows(const Vector<InputWindowInfo>&) {}
+ void transferTouchFocus(const sp<IBinder>&, const sp<IBinder>&) {}
void registerInputChannel(const sp<InputChannel>&) {}
void unregisterInputChannel(const sp<InputChannel>&) {}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 4b3940d..069dcc0 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2748,6 +2748,7 @@
if (inputChanged || mVisibleRegionsDirty) {
updateInputWindows();
}
+ executeInputWindowCommands();
updateCursorAsync();
}
@@ -2772,6 +2773,23 @@
mInputFlinger->setInputWindows(inputHandles);
}
+void SurfaceFlinger::executeInputWindowCommands() {
+ if (!mInputFlinger) {
+ return;
+ }
+
+ for (const auto& transferTouchFocusCommand : mInputWindowCommands.transferTouchFocusCommands) {
+ if (transferTouchFocusCommand.fromToken != nullptr &&
+ transferTouchFocusCommand.toToken != nullptr &&
+ transferTouchFocusCommand.fromToken != transferTouchFocusCommand.toToken) {
+ mInputFlinger->transferTouchFocus(transferTouchFocusCommand.fromToken,
+ transferTouchFocusCommand.toToken);
+ }
+ }
+
+ mInputWindowCommands.clear();
+}
+
void SurfaceFlinger::updateCursorAsync()
{
for (const auto& [token, display] : mDisplays) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index d7de290..04f454c 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -523,6 +523,7 @@
void handleTransactionLocked(uint32_t transactionFlags);
void updateInputWindows();
+ void executeInputWindowCommands();
void updateCursorAsync();
/* handlePageFlip - latch a new buffer if available and compute the dirty