95 Commits

Author SHA1 Message Date
Mathias Agopian
4cfb3a69d2 fix live wallpapers on Droid
On omap3 h/w we force opaque formats to RGB_565 instead of RGBX_8888
because the GL driver doesn't support it. RGBX_8888 is always remapped
to RGBA_8888.

Change-Id: I0bfabeb98c8d3a399079e6797cf2a0ee95915324
2010-06-30 15:43:47 -07:00
Mathias Agopian
781953d62d Revert "Revert "fix [2793164] Spam 2x/second with TOT master in SurfaceFlinger""
This reverts commit 330dd304a471d260a73e342a240921c03c825f99.
2010-06-25 18:02:21 -07:00
Andreas Huber
330dd304a4 Revert "fix [2793164] Spam 2x/second with TOT master in SurfaceFlinger"
This reverts commit 081bc5c47d8a980e6eafa70ddafcd89981586391.
2010-06-25 11:05:37 -07:00
Mathias Agopian
081bc5c47d fix [2793164] Spam 2x/second with TOT master in SurfaceFlinger
Make sure to not use GL_TEXTURE_EXTERNAL when it's not supported
by the GL. The error was harmless, but annoying.

Change-Id: I571a9a9b05d35da51420950a6a6e95629067efd0
2010-06-24 21:28:59 -07:00
Mathias Agopian
f8b4b4408c Added support for the GL_TEXTURE_EXTERNAL target
This will allow us to support YUV surfaces.

Change-Id: I2d4da75f1006a5285bdc552695d4caeecccf2183
2010-06-15 17:31:17 -07:00
Mathias Agopian
5e14010b1f allow re-targetting of surfaces
Surfaces can now be parcelized and sent to remote
processes. When a surface crosses a process
boundary, it looses its connection with the
current process and gets attached to the new one.

Change-Id: I39c7b055bcd3ea1162ef2718d3d4b866bf7c81c0
2010-06-08 20:10:02 -07:00
Mathias Agopian
1debc66521 fix [2751143] Device crashes when in a text box for too long 2010-06-08 15:40:56 -07:00
Mathias Agopian
7623da435e split surface management from surface's buffers management
Change-Id: If3c5655d1231f8f0c49ba68f972b1b20c93b3f87
2010-06-04 18:57:41 -07:00
Mathias Agopian
593c05ce7b clean-up client management.
simplified things a lot, the biggest change is that the concept
of "ClientID" is now gone, instead we simply use references.

Change-Id: Icbc57f80865884aa5f35ad0d0a0db26f19f9f7ce
2010-06-04 18:57:40 -07:00
Mathias Agopian
770492cb2b more clean-up in preparation of bigger changes
the most important change here is the renaming of
ISurfaceFlingerClient to ISurfaceComposerClient

Change-Id: I94e18b0417f50e06f21377446639c61f65f959b3
2010-05-28 17:19:16 -07:00
Mathias Agopian
898c4c91be fix the threading issue for setBuffercount()
this change introduces R/W locks in the right places.
on the server-side, it guarantees that setBufferCount()
is synchronized with "retire" and "resize".
on the client-side, it guarantees that setBufferCount()
is synchronized with "dequeue", "lockbuffer" and "queue"
2010-05-20 18:00:42 -07:00
Mathias Agopian
9bce8737f2 more surfaceflinger cleanups
get rid of the "fake rtti" code, and use polymorphism instead.
also simplify how we log SF's state (using polymorphism)

Change-Id: I2bae7c98de4dd207a3e2b00083fa3fde7c467922
2010-04-21 22:28:20 -07:00
Mathias Agopian
e5c0a7b781 clean-up surfaceflinger a bit
get rid of the glDrawTexi path and use floating points instead of fixed point maths

Change-Id: I3aa9ce2dc082f702160e605a16ba5fe987cdf087
2010-04-20 15:58:36 -07:00
Mathias Agopian
59962ce3b0 Make pixels prettier.
Change-Id: If3b0774b70cbe943894c15ffa1da111ad887010f
2010-04-05 18:12:27 -07:00
Mathias Agopian
9c041bbd81 fix [2511580] Window poop on screen - drop down list left some residual when it resized
Change-Id: Ib9a3622e7a568ba26717a93b5bfa4a191651f4d0
2010-03-16 17:54:27 -07:00
Mathias Agopian
85b8d12207 improve SF logging/debugging a little bit
Change-Id: I6a57f89c25defc293fd748cc1fbd710031c02ec2
2010-03-08 19:30:56 -08:00
Mathias Agopian
31901cc0b6 fix [2425395] portrait UI briefly shows in landscape
the "freeze" timeout was not initialized properly which caused it
to kick-in immediately instead of after 5s
2010-03-01 18:36:14 -08:00
Mathias Agopian
5d26c1e38d Added a name to Surface created by SurfaceFlinger
Updated the window manager to use this new facility.
Surfaces name are now printed by "dumpsys".
2010-03-01 18:34:50 -08:00
Mathias Agopian
022a43b15b to help debugging [2461567] Home screen redraw messed up
log SF's idea of the front buffer in dumpsys.
2010-02-26 18:59:23 -08:00
Mathias Agopian
8c20ca39c1 remove a dependency of surfaceflinger on libskia
libskia was only used for a small part of SkTransform. We now implement
Transform is surfaceflinger directly.
2010-02-22 17:30:40 -08:00
Mathias Agopian
66c77a5b42 Add support for physically rotated displays
This feature is currently controled by a system property.
"ro.sf.hwrotation" can be set to either 90 or 270. It'll cause
SF to rotate the screen by 90 and 270 degres respectively.

That is, if the driver reports 800x480 for instance, and
ro.sf.hwrotation is set to 90, applications will "see" a
480x800 display and will run in portrait.

This is implemented by introducing an extra "display"
transformation in the GraphicPlane.
2010-02-08 15:49:35 -08:00
Mathias Agopian
0e44976aa4 fix [2297155] SurfaceFlinger's freeze-timeout doesn't work
There was bug in the logic that calculated the relative timeout, the start time was
reset each time an event was received, which caused the timeout to never occur if
an application was constantly redrawing.

Now we always check for a timeout when we come back from the waitEvent() and
process the "anti-freeze" if needed, regardless of whether an event was received.
2009-12-01 17:23:28 -08:00
Mathias Agopian
6950e428fe fix [2167050] glTexImage2D code path buggy in SurfaceFlinger
When EGLImage extension is not available, SurfaceFlinger will fallback to using
glTexImage2D and glTexSubImage2D instead, which requires 50% more memory and an
extra copy. However this code path has never been exercised and had some bugs
which this patch fix.

Mainly the scale factor wasn't computed right when falling back on glDrawElements.
We also fallback to this mode of operation if a buffer doesn't have the adequate
usage bits for EGLImage usage.

This changes only code that is currently not executed. Some refactoring was needed to
keep the change clean. This doesn't change anything functionaly.
2009-10-06 17:00:25 -07:00
Mathias Agopian
0c4cec7e4d Attempt to fix [2152536] ANR in browser
The ANR is caused by SurfaceFlinger waiting for buffers of a removed surface to become availlable.
When it is removed from the current list, a Surface is marked as NO_INIT, which causes SF to return
immediately in the above case. For some reason, the surface here wasn't marked as NO_INIT.

This change makes the code more robust by always (irregadless or errors) setting the NO_INIT status
in all code paths where a surface is removed from the list.

Additionaly added more information in the logs, should this happen again.
2009-10-02 18:12:30 -07:00
Mathias Agopian
98a9c56acf attempt to work around [2155085, 2150246] stuck in closeTransaction() 2009-09-30 15:15:07 -07:00
Mathias Agopian
8851617aea remove unused code 2009-09-29 22:32:36 -07:00
Mathias Agopian
81384bf927 don't emit GL commands when sf is in freeze mode
We were emitting GL commands, calling composition complete and releasing clients
without ever calling eglSwapBuffers(), which is completely wrong on non-direct
renders. This could cause transient drawing artifacts when unfreezing the
screen (upon orientaion change for instance) and could also block the clients
for ever as they are waiting for their previous buffer to be rendered.
2009-09-27 22:47:32 -07:00
Mathias Agopian
f2d28b7485 minor SurfaceFlinger code cleanup and remove unnecessary tests 2009-09-24 14:57:26 -07:00
Mathias Agopian
cc934763c3 turn dithering off if it's not needed 2009-09-23 19:16:27 -07:00
Mathias Agopian
2e4b68d57b fix [2133214] STOPSHIP: revert I4a06bb4f: workaround for [2113743] Sholes: frozen then runtime restart going to list view
Revert "workaround for [2113743] Sholes: frozen then runtime restart going to list view"

This reverts commit 4a06bb4f3355b0ef2b76aa883704da9d154c44ae.
2009-09-23 16:59:57 -07:00
Mathias Agopian
4a06bb4f33 workaround for [2113743] Sholes: frozen then runtime restart going to list view 2009-09-20 17:08:45 -07:00
Mathias Agopian
b1a1874625 Android side of the fix for [2121211] Sholes has stutter during animations
a new method, compostionComplete() is added to the framebuffer hal, it is used by surfaceflinger to signal the driver that the composition is complete, BEFORE it releases its client. This gives a chance to the driver to
2009-09-17 16:18:16 -07:00
Mathias Agopian
bcef9ac35d add basic time stats for surfaces lock time 2009-09-17 01:35:28 -07:00
Mathias Agopian
53973fda84 fix [2117464] SF can crash when calling dumpsys 2009-09-14 15:59:16 -07:00
Mathias Agopian
248b5bd51e fix [2112575] stuck on DequeueCondition for a surface that doesn't exist anymore
this also fixes part of [2111536] Device is soft rebooted after ending the call through voice dialer
2009-09-10 19:41:18 -07:00
Mathias Agopian
9779b221e9 fix [2068105] implement queueBuffer/lockBuffer/dequeueBuffer properly
Rewrote SurfaceFlinger's buffer management from the ground-up.
The design now support an arbitrary number of buffers per surface, however the current implementation is limited to four. Currently only 2 buffers are used in practice.

The main new feature is to be able to dequeue all buffers at once (very important when there are only two). 

A client can dequeue all buffers until there are none available, it can lock all buffers except the last one that is used for composition. The client will block then, until a new buffer is enqueued.

The current implementation requires that buffers are locked in the same order they are dequeued and enqueued in the same order they are locked. Only one buffer can be locked at a time.

eg. Allowed sequence:   DQ, DQ, LOCK, Q, LOCK, Q
eg. Forbidden sequence: DQ, DQ, LOCK, LOCK, Q, Q
2009-09-07 16:32:45 -07:00
Mathias Agopian
ffae4fcc78 attempt to fix [2099362] Possible SurfaceFlinger crash 2009-09-04 19:50:23 -07:00
Mathias Agopian
a8d49178f9 dumpsys SurfaceFlinger will now always dump SF's state, even if SF is deadlocked
(in this case the state is dumped without the proper locks held which could result to a crash)

in addition, the last transaction and swap times are printed to the dump as well as the time spent
*currently* in these function. For instance, if SF is unresponsive because eglSwapBuffers() is stuck,
this will show up here.
2009-08-26 16:55:50 -07:00
Mathias Agopian
18b6b49ea5 fix a bug that caused the PixelFormat viewed by Surface to be wrong.
what happened is that the efective pixel format is calculated by SF but Surface nevew had access to it directly.
in particular this caused query(FORMAT) to return the requested format instead of the effective format.
2009-08-19 17:46:26 -07:00
Mathias Agopian
33863dd9e1 resolved conflicts for merge of ac38dfc5 to master 2009-07-28 14:20:21 -07:00
Mathias Agopian
12cedff50c fix [2017532] Partial Update leaves residual image. 2009-07-28 10:57:27 -07:00
Mathias Agopian
07e456d871 am 4d2dbebf: fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624
Merge commit '4d2dbebf3d08209f751585d8cc367369e2f6e32f'

* commit '4d2dbebf3d08209f751585d8cc367369e2f6e32f':
  fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624
2009-07-09 20:05:11 -07:00
Mathias Agopian
4d2dbebf3d fix for [1885684] E/SurfaceFlinger( 60): not enough memory for layer bitmap size=4294938624 2009-07-09 18:16:43 -07:00
Mathias Agopian
d763b5d919 get rid of references to MemoryDealer in SurfaceFlinger 2009-07-02 18:50:51 -07:00
Mathias Agopian
359140c171 free gralloc buffers as soon as possible (when a surface is not visible any longer), client who have the buffers still mapped won't crash, btu may see garbage data 2009-07-02 18:45:29 -07:00
Mathias Agopian
ecfa7ccd4f fix a bug that caused artifacts when SWAP_RECTANGLE was enabled 2009-06-29 18:49:56 -07:00
Mathias Agopian
0aed7e97a3 fix [1947273] the DimLayer causes the whole screen to update during transactions 2009-06-29 14:44:11 -07:00
Mathias Agopian
2f157b1919 fix [1947273] the DimLayer causes the whole screen to update during transactions 2009-06-28 02:54:16 -07:00
Mathias Agopian
8c9687ae29 fix an update bug with SHOW_UPDATE debug feature. Fix a problem with the debug binder codes too 2009-06-26 19:06:36 -07:00
Mathias Agopian
6edf5af578 fix a memory corruption where a SF Client could be used after it's been destroyed 2009-06-19 17:00:27 -07:00