157 Commits

Author SHA1 Message Date
Jack Palevich
7dee7a38ba Notify monitor waiters when changing mSurfaceIsBad value.
Otherwise the waiters might not wake up, leading to ANRs.

Bug: 6307843
Change-Id: I0646b4e8368f80dbff46342f75709992796973fd
2012-04-10 06:05:42 -07:00
Jack Palevich
7d73df83f9 Try to survive a failure return from eglMakeCurrent.
Assume a failure in eglMakeCurrent occurs because the SurfaceView
surface has been destroyed.

See b/6257956 for an example of this failure happening during rotation
stress testing.

Change-Id: I4618703b5291aba3a3f0c6bd83c3435a67b97d33
2012-03-29 16:24:58 -07:00
Jack Palevich
db6c78b5bd Make GLSurfaceView handle eglSwapBuffers errors more robustly.
A careful reading of the EGL spec, as well as experience with many
different EGL drivers, has shown that it is error prone to attempt to
discriminate between different error conditions.

We now treat any error besides EGL_CONTEXT_LOST as an indication that the
EGL context is in a bad state, most likely due to the window manager
having removed the underlying surface flinger surface.

In addition, we changed the way we deal with this kind of error:
Previously we would ignore the error and keep rendering. But if the
EGL context and surface has become invalid, it would be better to
stop drawing. We now stop drawing until the surface view surface is
recreated.

See b/6032663 for an example of this problem affecting the GMM app,
but note that GMM is using their own version of GLSurfaceView, so this
change won't help them directly. They'll have to make a similar change
to their version of GLSurfaceView.

Change-Id: Iffe3e1e3a3c7a91d03140fd34391eadeaecf777e
Signed-off-by: Jack Palevich <jackpal@google.com>
2012-03-29 12:23:57 -07:00
Amith Yamasani
ad812a23df Merge "Package restrictions per user" 2012-03-22 15:11:51 -07:00
Jack Palevich
f7f4c20605 Merge "Remove EGL context limit for Adreno GPUs." 2012-03-22 11:47:30 -07:00
Amith Yamasani
483f3b06ea Package restrictions per user
Packages can be enabled/disabled per user.
This requires maintaining stopped/launched states and
enabled / disabled components and packages per user.

Refactored pm.Settings and PackageSettingsBase to keep
track of states per user.

Migrated the stopped-packages.xml to users/<u>/package-restrictions.xml

Changed intent resolution to handle individual user restrictions.
Bunch of IPackageManager calls now have a userId argument.
Make AppWidgetService handle removals of packages.

Added some tests for pm.Settings and PackageManager.

Change-Id: Ia83b529e1df88dbcb3bd55ebfc952a6e9b20e861
2012-03-22 10:08:24 -07:00
Jack Palevich
8b854cd74b Remove EGL context limit for Adreno GPUs.
This change allows Adreno GPUs to have multiple EGL contexts. We had
to limit this in earlier versions of Android due to limitations in
the Adreno GPU driver (only 8 EGL contexts allowed system wide.)
That brand of GPU has improved its EGL drivers to support multiple
EGL contexts in more recent versions of their drivers used on more
recent versions of Android.

Bug: 6142005
Change-Id: Id3030466be9a3d9fbe728f1785378c1f05da98fe
2012-03-19 11:17:40 -07:00
Jack Palevich
48a59c3d85 Ignore EGL_BAD_CURRENT_SURFACE errors from eglSwapBuffers
Certain EGL device drivers are generating this error, so we need to
survive it. (It's not clear from the EGL spec whether this is a
legitimate error code, but since it's being generated we need to
handle it.)

Remove logging of expected errors from elSwapBuffers. We expect these
errors to happen, and are handeling them by ignoring them.
No need to clutter the logs.

Bug: 6083241

Change-Id: If17dcfbb68d3009b92cf95a448728ccb47023b51
2012-03-15 11:50:45 -07:00
Siva Velusamy
64d10a1da0 Expose a function to set OpenGL Trace level.
This patch adds a function setGlDebugLevel() to libEGL, and
exposes it to the Java layer at android.opengl.GLUtils.enableTracing().

Change-Id: Ia5abb130bc32fcfe3ab25b0a0a5283a54c54f357
2012-03-09 15:25:29 -08:00
Romain Guy
97eda365fc Remove unused private APIs
Change-Id: Ib22005c7ed9923120089a1f1c806bca55bb90967
2012-02-17 13:08:35 -08:00
Romain Guy
0219af277e am ea54d0dc: am 723218b4: Merge "Hide ManagedEGLContext until we are sure this is the correct API." into ics-mr1
* commit 'ea54d0dc0dfeef5560fea04667804413d522025f':
  Hide ManagedEGLContext until we are sure this is the correct API.
2011-11-21 21:23:49 -08:00
Romain Guy
3526b00a53 am c26e4d18: am 8cd39e3a: Merge "Notify views when EGL resources are about to be destroyed Bug #5639899" into ics-mr1
* commit 'c26e4d18a20ab0b3e769fb3e547994f1c27d6713':
  Notify views when EGL resources are about to be destroyed Bug #5639899
2011-11-21 21:08:42 -08:00
Romain Guy
dccf73a50c Hide ManagedEGLContext until we are sure this is the correct API.
Change-Id: If54942d342ca8ea348e10231b2aed3e5d3bd701b
2011-11-21 18:27:21 -08:00
Romain Guy
31f2c2e946 Notify views when EGL resources are about to be destroyed
Bug #5639899

Change-Id: I7c5d8bebf02294426f5b3ab1358a31c38a4fd064
2011-11-21 10:55:41 -08:00
Jamie Gennis
fa1a6eb584 am 0272e600: am a37a78e2: Merge "GLES: add image external enums" into ics-mr1
* commit '0272e60060162d2c32aec02d9cd1414dbbe14782':
  GLES: add image external enums
2011-11-18 02:37:22 -08:00
Jamie Gennis
a37a78e2ef Merge "GLES: add image external enums" into ics-mr1 2011-11-17 15:47:28 -08:00
Jack Palevich
22da9a8beb Merge "Fix potential GLThread / GLSurfaceView memory leak." 2011-11-17 11:05:30 -08:00
Dianne Hackborn
77c5f4def4 am 9aa6bd1c: am 717a25dc: Add new ManagedEGLContext class to help apps participate in memory trimming.
* commit '9aa6bd1c34fe3583fe31f283a6415e84fec12567':
  Add new ManagedEGLContext class to help apps participate in memory trimming.
2011-11-17 05:46:34 -08:00
Dianne Hackborn
717a25dc2a Add new ManagedEGLContext class to help apps participate in memory trimming.
This class provides an API for an application to know when it is time to
destroy its EGL context when memory is being trimmed.  By having this in
the framework, we can still detect whether it will be useful to destroy
any EGL contexts (because we know if doing so will destroy all of them).

Change-Id: I1eac8d640052778052926b875c7928008f752182
2011-11-16 14:04:53 -08:00
Jack Palevich
80b3cd6bc6 Fix potential GLThread / GLSurfaceView memory leak.
Until now a leak was possible under the following scenario:

Create a GLSurfaceView
Register a renderer (this automatically starts a GLThread).
Discard the GLSurfaceView without installing it in the view system.

This scenario can occur when a device is rotated rapidly from
orientation A to orientation B to orientation C. In that scenario,
orientation B's GLSurfaceView might be discarded without ever being
attached to a window.

If this issue had been identified before GLSurfaceView had clients, one
possible fix would have been to delay the construction of the GLThread
until the GLSurfaceView was attached to a window. Unfortunately, it's
too late, and so making that change would lead to observable changes in
behavior, possibly breaking some clients.

Instead, fixed by making GLThread and EGLHelper static classes that hold
onto a weak reference to the GLSurfaceView. This allows the GLSurfaceView
to be garbage collected when it is no longer used, even if the GLThread
is active. GLSurfaceView's finalize method will manually stop the GLThread
if it is still running when the GLSurfaceView exits.

Part of this change was to remove the Renderer reference from GLThread,
because Renderer is a user-supplied class that could contain a reference
chain that points back to the GLSurfaceView.

Fixes b/5606613 "GLSurfaceView that's never added to a window will
leak threads and views, can leak activities"

Change-Id: Iafdc329eb6e9e40062358e7c119f5547ffe23d5e
2011-11-15 14:51:27 -08:00
Jamie Gennis
9726b1b54b GLES: add image external enums
This change adds Java definitions for the enums of the
GL_OES_EGL_image_external OpenGL ES extension.

Bug: 3482193
Change-Id: Ib50326f8be9b9cc9021753855c3846ddcdc5eaa2
2011-11-15 11:35:46 -08:00
Akwasi Boateng
1333742bed am cb0db030: Merge branch \'ics-mr1-plus-aosp\' of ssh://android-git:29418/platform/frameworks/base into ics-mr1-plus-aosp
* commit 'cb0db0306b5849a35d3d99eea1b34ce019c6f0d8':
  Make the overridden ImageView#setVisibility remotable
  Clamp non-monotonic stats instead of dropping.
  DO NOT MERGE. Fix leak in LayoutTransition
  Fix lastVisible/global rects
  Fix Wimax-less build.
  Fix leak in LayoutTransition
  Deferring wallpaper update to improve workspace scrolling (issue 5506959)
  Terminate EGL when an app goes in the background
  boot animation is dithered and scaled
  Fix NdefRecord byte-stream constructor.
  PopupWindow dismiss() can get into a recursive loop.
  Fold WiMAX state into the mobile RSSI.
  Remove dedicated wimax icon to fix RSSI layout.
2011-11-11 15:34:19 +00:00
Romain Guy
8ff6b9ebee Terminate EGL when an app goes in the background
This does not happen on high end gfx devices. This happens
only if only one EGL context is initialized in the current
process.

Change-Id: Ibd1737efdf84eef8a84108b05795440d1ae9964e
2011-11-10 16:44:49 -08:00
Alex Sakhartchouk
9829cceca1 Merge "Properly passing an unused variable through." 2011-11-07 09:53:28 -08:00
Alex Sakhartchouk
fc5e224e8d Properly passing an unused variable through.
Change-Id: Ie49b5855bfca4e202ed41b6167a899832e99d728
2011-11-03 17:28:33 -07:00
Joe Fernandez
eba186448f am 74b2b954: am 09848bc8: Merge "docs: add developer guide cross references, Project ACRE, round 3" into ics-mr0
* commit '74b2b9547329a0b05e0bd5701057696007b854bb':
  docs: add developer guide cross references, Project ACRE, round 3
2011-10-31 12:26:31 +00:00
Joe Fernandez
74b2b95473 am 09848bc8: Merge "docs: add developer guide cross references, Project ACRE, round 3" into ics-mr0
* commit '09848bc89de999416e2de82a7693b2deec6bf802':
  docs: add developer guide cross references, Project ACRE, round 3
2011-10-29 02:16:10 +00:00
Jack Palevich
b50e2afd67 Destroy and recreate the EGL surface when the surface size changes.
Details:
+ Split EGLHelper.createSurface into two methods.
+ Add a separate flag for specifying when to create the GlInterface.
+ destroy and recreate the EGL surface when the surface size changes
+ Remove no-longer-needed work-around for b/2263168.

This fixes b/2263168

Change-Id: I0d2596527e3c8dabacdd8a8e427531eaefe7d266
2011-10-28 14:38:53 -07:00
Joe Fernandez
61fd1e8d8c docs: add developer guide cross references, Project ACRE, round 3
Change-Id: I6125315ecdf0f78dd947c514a9944729d723e95d
2011-10-28 14:23:23 -07:00
Jack Palevich
a35c120d8f Work around race condition when shutting down a surface flinger surface.
Works around b/4588890

Change-Id: Ie0cf1f212686aec93cda85bf112f4b7ab4197256
2011-10-14 07:34:05 -07:00
Jack Palevich
cc5471c353 Avoid allocating temporary memory for Matrix operations.
Also fix a bug where Matrix.invertM was not returning false when the
matrix could not be inverted.

Change-Id: I68b172032093d9f257e88c802de936633bb4912c
2011-09-20 19:59:26 -07:00
Romain Guy
407ec78b82 Add OpenGL backend to ImageWallpaper
Bug #5204874

Currently disabled.

Change-Id: I5e7b35dce2981b0691f107e39c6394b260466543
2011-08-24 17:06:58 -07:00
Mathias Agopian
3ab8855794 fix an issue where the screen could be stale after a surface size change
some GLES drivers dequeue buffers before a frame is started
(which is allowed), which can cause a that frame to be rendered
into a buffer of the wrong size. Such buffer will be ignored
by the compositor. If the application draws only once after a
size change, the screen might stay in this stale state.

this can be avoided by telling the GL driver to purge all its
pending buffers, which is done by making the surface not current
and then current again.

this solution is specific to android, but acceptable because
handled solely in the framework.

Bug: 2263168
Change-Id: I3d3c9a019979a9186e329d3160fa54adac78d3f7
2011-08-01 20:24:02 -07:00
Mathias Agopian
43dd61e08a fix typo in a comment
Change-Id: If913611a65e8b578021e9f9a9546f05e0ce6ef44
2011-07-12 14:11:07 -07:00
Romain Guy
e5e0c50f7d Properly refcount SurfaceTexture in the JNI layer.
Change-Id: I4b4c8020c13b8d6ce0d302fe42410033bf5785a6
2011-06-15 16:14:26 -07:00
Romain Guy
8f0095cd33 Allows to render with an OpenGL context inside a TextureView.
Change-Id: I59453f7fc3997f0502a1c5d325d37fed376fabc7
2011-05-02 18:32:29 -07:00
Jack Palevich
7c80244afb Fix typo in Matrix.mPerspective.
(Introduced by a copy-and-paste mistake when factoring out a common
expression. D'Oh!)

Change-Id: I5e97dde2d2f4564fc74ba69bfa4a2f9db44c8873
2011-04-21 15:46:27 -07:00
Jack Palevich
d793299e87 Add utility method Matrix.perspectiveM
Change-Id: Ic9d5e5d967bbc08acc524c5092ce61a1cdbfd360
2011-04-21 14:52:37 -07:00
Elliott Hughes
24ce5fb2cc Kill the global references in the OpenGL wrappers.
Just use jniThrowException instead. Note that it would be trivial to throw
seemingly more appropriate exceptions (NullPointerException and
OutOfMemoryException in particular), but I'm only attempting to preserve
existing behavior here.

I also found shadowing bugs in some of the special-case functions, which
would previously always have leaked memory.

This also moves an accidental change to a generated file (ActivityThread ->
AppGlobals) into the generator, so it won't be overwritten in future.

Change-Id: Iab570310b568cb406c60dd0e2b8211f8a36ae590
2011-04-11 15:31:20 -07:00
Romain Guy
9b7146db6d Fix EGL JNI bugs
Bug #3461349

Before this change, eglGetCurrent*() could not be used to compare
contexts, displays and surfaces at the Dalvik level.

Change-Id: I442037dae37bc357b64810ab10c779b5754e9153
2011-03-07 18:05:04 -08:00
Jack Palevich
70a1875635 Extend recycled bitmap check to all GLUtils APIs.
Change-Id: I9ea0022b167af2153190b6642aa303232e257379
2011-02-07 11:36:47 -08:00
Jack Palevich
5f89f510f3 Throw an exception when trying to upload a recycled bitmap.
Previously we would upload garbage.

Change-Id: Id785792a16f9d24685687f4e6b64ec893ccad225
2011-02-02 21:16:53 -08:00
Jack Palevich
29406daf21 Add GL11ExtensionPack support to GLDebugWrapper
Allows calling GL11ExtensionPack APIs in a GL context that has been
wrapped for debugging.

Change-Id: Ib0695b51a92f5dcce32db8b0dc7ee948e5059e7f
2011-01-27 14:46:52 -08:00
Jack Palevich
75f2bc04df Unhide GLSurfaceView.get/setPreserveEGLContextOnPause
Change-Id: I882b8fa7888e2baae41c81b75af7fc1f639d38d6
2011-01-18 15:53:25 -08:00
Jack Palevich
8432b3f98a Add support for preserving EGL contexts when pausing / resuming.
Hidden for now.

Change-Id: I350576c11960a1aa232da7aebc5c6ec60ff796b5
2011-01-14 11:45:17 -08:00
Dan Bornstein
c086ca1fa7 These files had an older header.
This patch replaces the file headers with the approved Android
header text.

Change-Id: I63cbd21e9112dab404158fb65f74bc6ca5b07eac
2010-12-07 15:35:20 -08:00
Jack Palevich
1396afb730 Preserve the render mode when recreating the render thread.
Change-Id: I67a12a9598d3ef099bef8727411891614b1bc3f7
2010-10-27 11:37:23 -07:00
Jack Palevich
2ff6a82461 Allow a GLSurfaceView to be reattached to a window.
This approach is more backwards-compatible than the previous attempt.

The onDetachedFromWindow case is unchanged from the "classic"
GLSurfaceView behavior, except that we don't throw a NPE if the
renderer has never been set.

Change-Id: Ia8103a73366ddb13be44f16b789c929e75ddc792
2010-10-26 18:19:14 -07:00
Jack Palevich
fc5508bc99 Do not exit the GLSurfaceView thread when detached from a window.
Allows a GLSurfaceView to be removed from a window and later reattached
to a window.

Change-Id: I2b44f35d0c95404b13912782df8877953609a5d0
2010-10-25 19:38:13 -07:00
Mathias Agopian
f45b674d48 reserve android.opengl.GLWallpaperService name for future use
Change-Id: I7a217593a1ca39214dda26ddb3af3ddc30a8a95a
2010-08-25 16:57:02 -07:00