Commit Graph

146 Commits

Author SHA1 Message Date
Mathias Agopian
a9f54a77cd Merge "fix [3369743] SurfaceFlinger reads hardware composer hints before calling hwc.prepare()" into honeycomb 2011-01-20 12:25:33 -08:00
Mathias Agopian
2bd1d95efe clean-up unneeded code
now that we removed the notion of a "inUse" buffer in surfaceflinger
a lot of code can be simplified / removed.

noteworthy, the whole concept of "unlockClient" wrt. "compositionComplete"
is also gone.

Change-Id: I210413d4c8c0998dae05c8620ebfc895d3e6233d
2011-01-20 12:10:11 -08:00
Mathias Agopian
48b888aab9 improve SurfaceFlinger 'dumpsys' log
list the purgatory, which shows windows that have been closed,
but for which the client still has references.

Change-Id: I5168bb88cb328d5d77d71d0871deb9190f493126
2011-01-19 16:15:53 -08:00
Mathias Agopian
f20a32415d fix [3369743] SurfaceFlinger reads hardware composer hints before calling hwc.prepare()
Change-Id: If3277c7b9d4cb8ef20d1706155fac7b87e64fb20
2011-01-19 15:24:23 -08:00
Mathias Agopian
c1d1b0d9b7 Add logs when taking a screenshot to help tracking issue 3361121
Change-Id: I61d1e072ebe7061ee1d7255f6121b684e2923d1b
2011-01-16 17:25:26 -08:00
Mathias Agopian
0d3dcc4aab Merge "partially fix [3306150] HTML5 video with H/W acceleration blackout" into honeycomb 2011-01-14 19:27:38 -08:00
Mathias Agopian
76cd4ddc6a partially fix [3306150] HTML5 video with H/W acceleration blackout
We used to guarantee that a layer in SurfaceFlinger would never be
destroyed before all references (to its ISurface) on the client
side would be released. At some point, this guarantee got
relaxed to allow to free gralloc resources sooner. This last
change was incorrect, because:
- in implementations with reference-counting the gralloc resources
wouldn't be released anyways, until all the mapping were gone
- in implementations without ref counting, the client side
would most likely crash or do something bad
- it also caused the SharedBufferStack slot to be reallocated
to another surface, which could be problematic if the client
continued to use the surface after the window manager destroyed it.

So, we essentially reinstate the guarantee that layers won't be
destroyed until after all references to their ISurface are
released.

NOTE: This doesn't entirely fix 3306150 because there is another
problem there where the Browser continues to use a surface after it
has been destroyed.

Change-Id: I305c830dd722b30a6d53cbf3a9c714fd3cf7eb06
2011-01-14 18:19:02 -08:00
Mathias Agopian
a49576f06b Merge "fix [3312683] Camera mirroring problem after switching from back to front camera" into honeycomb 2011-01-14 10:54:47 -08:00
Mathias Agopian
ad456f9878 fix [3312683] Camera mirroring problem after switching from back to front camera
the crop as well as buffer orientation can change at every frame, when that happens
we need to reset the hwc HAL (ie: set the GEOMETRY_CHANGED flag).
currently we achieve this by taking the same code path than an actual geometry change
which is a bit more heavy than necessary.

Change-Id: I751f9ed1eeec0c27db7df2e77d5d17c6bcc17a24
2011-01-13 17:53:01 -08:00
Jamie Gennis
9a78c90cd4 Fix remote GraphicBuffer allocation in SurfaceFlinger.
This change fixes a horrible hack that I did to allow application
processes to create GraphicBuffer objects by making a binder call to
SurfaceFlinger.  This change introduces a new binder interface
specifically for doing this, and does it in such a way that
SurfaceFlinger will maintain a reference to the buffers until the app is
done with them.

Change-Id: Icb240397c6c206d7f69124c1497a829f051cb49b
2011-01-13 12:19:04 -08:00
Jamie Gennis
4956334065 Add the ISurfaceComposer::createGraphicBuffer IPC.
This change adds a new binder method to the ISurfaceComposer interface.
This IPC is intended to allow SurfaceFlinger clients to allocate gralloc
buffers using SurfaceFlinger as a proxy to gralloc.

Change-Id: Ide9fc283aec5da6268ba62cfed0c3319a50b640d
2011-01-06 13:12:35 -08:00
Mathias Agopian
f653b897a4 fix a small bug that caused screenshot to show garbage in some cases
we were not clearing the screen entirely, which caused garbage when
the screen wasn't entirely covered by windows.

Change-Id: Ie9ab9b94eabfa6cafddf45bb14bc733bdc8d35c0
2010-12-16 18:47:29 -08:00
Mathias Agopian
e6f0984361 workaround [3201922] display not on: log full of gralloc errors
while we're waiting for the real fix in the gralloc/gpu driver,
this workaround should resolve the issue.

we make sure to call compositionComplete after everytime we do
composition with the GPU (even for the screenshot case), which is
where the buffer locks are released.

Change-Id: I3cb5ad67d48c81a23100172bab77e86a70e29152
2010-12-15 15:54:57 -08:00
Mathias Agopian
420a283c4d Fix a problem where hwc and GL composition could show a different buffer
if a surface's buffers are reallocated, the current active buffer will
end-up pointing on one of these until a new buffer is retired.

we're now keeping a reference to the actual buffer until we retire a
new one.

Change-Id: Ib1703947e7a0340694d846e0962576318863b935
2010-12-14 20:30:37 -08:00
Mathias Agopian
ebeb709596 fix debug.sf.showbackground
Change-Id: Ie4eeca006ad6d8030900d8cb0029e4d1c22474fb
2010-12-14 18:38:36 -08:00
Mathias Agopian
da9584dc29 fix [3223749] media server crashes when switching mode from video capture to still image capture
there was an issue were in some situation SF would call prepare() on hwc
with a NULL handle and never call prepare again.
in this situation, we onw set the SKIP flag to make sure that hwc
won't process this layer and as soon as we receive our first buffer we
trigger a recompute of the visible regions which will end-up calling
prepare() again.

Change-Id: I6b400b2df79712408b9315a9859290c7fcb1609e
2010-12-14 15:53:39 -08:00
Mathias Agopian
fb88981051 Merge "fix [3176642] Camera preview turns completely black for multiple toggles between camera and camcorder app" 2010-12-14 15:51:41 -08:00
Mathias Agopian
5eee3d2b13 Merge "minor clean-up. SurfaceFlinger doesn't need libpixelflinger.so." 2010-12-14 15:51:32 -08:00
Mathias Agopian
dd17b3eaa9 fix [3176642] Camera preview turns completely black for multiple toggles between camera and camcorder app
There was a leak of Surface tokens when a surface was detached from a UserClient.
We now always detach a surface from its client before attaching to the new one,
this guarantees that its token is freed.

Change-Id: Icfad0b16286ed58155bdfafdf36ab161440aa485
2010-12-13 16:49:05 -08:00
Mathias Agopian
455d18d4c2 minor clean-up. SurfaceFlinger doesn't need libpixelflinger.so.
Change-Id: I3bdca74351c8e480a05084bc412a96c5f685221d
2010-12-13 16:47:31 -08:00
Mathias Agopian
bf2c6a6c8f [3258939] Need snapshot to limit which layers are included
Change-Id: Id7351a0e3f53dde99b291cffba553d89fd4d7ca9
2010-12-10 16:22:31 -08:00
Mathias Agopian
f345069099 [3211070] camera preview image is rendered offset from the UI overlay frame
somehow this change got lost.

Change-Id: I36f6c7ef3f782918042b77e9dc91a4c811d84a40
2010-12-08 17:40:28 -08:00
Mathias Agopian
86bdb2f918 fix [3260137] Sometimes front-facing camera mirroring is wrong
make sure to take the buffer's orientation into account.

Change-Id: I9fef89e66368ad2dec1cb8c7b77ac2b3b4858efb
2010-12-08 17:23:18 -08:00
Mathias Agopian
1293a8eb56 More clean-up. Get rid off the "blur" effect in SurfaceFlinger
For multiple reason, this effect is not maintainable and was never
used due to its abysmal performance. it'll be resurected when it can be
implemented efficiently.

Change-Id: Id4222c9b86c629275cdec18873ef07be8723b6d2
2010-12-08 17:13:19 -08:00
Mathias Agopian
a5529c8778 remove support for PUSH_BUFFER surfaces and overlays
the same functionality is now supported through
the h/w composer HAL, and YUV support in the GPU.

Change-Id: I8146605449954b8e8fd7f78810b7d873c2d8f5bf
2010-12-08 16:13:59 -08:00
Erik Gilling
1d21a9cafc surfaceflinger: add support for gralloc dump hooks
Change-Id: Ib6f539ed0132b70d040d653c03d52cc04249ac3c
2010-12-08 15:40:11 -08:00
Mathias Agopian
5ec99b57c3 should fix build.
Change-Id: I7705227ad123c73714af2ecb7ad84f5432a21c1d
2010-12-07 23:41:55 -08:00
Mathias Agopian
a1aa18fc26 resolved conflicts for merge of a0f011ff to master
Change-Id: I4c17021fc269ce66c98cc345353600eda332f980
2010-12-07 22:53:40 -08:00
Mathias Agopian
b5a00fcb71 am 48f42f8c: am 4153bf3a: Merge "[3171580] don\'t automatically log GraphicBuffer allocation failures" into gingerbread
* commit '48f42f8c3fbd33b2f46c6290ff5963dd58938cf9':
  [3171580] don't automatically log GraphicBuffer allocation failures
2010-12-07 17:24:03 -08:00
Mathias Agopian
9669d23cae am 05813b0e: Merge changes I244b5469,I32044e91 into gingerbread
* commit '05813b0eb92cb1bc79607ee402f14ca1e4b43f6d':
  [3253328, 3171580] Treat GONE and INVISIBLE views the same when calculating transparent regions
  [3171580] Fix two typos related to fixed-size buffers
2010-12-07 14:20:14 -08:00
Mathias Agopian
372c56e98b am 4153bf3a: Merge "[3171580] don\'t automatically log GraphicBuffer allocation failures" into gingerbread
* commit '4153bf3a259624a2f2dc497b77b225a1fb517abc':
  [3171580] don't automatically log GraphicBuffer allocation failures
2010-12-07 14:20:09 -08:00
Mathias Agopian
733189d408 [3171580] Fix two typos related to fixed-size buffers
mFixedSize was never set, this bug was introduced during some "cleanup", in
practice this could cause some issues when a fixed-size buffer was used and
the window was resized.

Layer::drawForSreenShot() had a typo that had no effect.

mFixedSize was used to determine if filtering was needed, which was a bit too
conservative and created a dependency between filtering and "fixed size" states
which should exist.

Now we enable filtering based on the size of the buffer vs. the size of the layer.

Change-Id: I32044e91b0c944c1b137efdceb3f01dfaa78119d
2010-12-03 17:35:06 -08:00
Mathias Agopian
678bdd6349 [3171580] don't automatically log GraphicBuffer allocation failures
some of these failures are not fatal and even expected in some cases
so they should not emit a dump in the log in those cases.

Change-Id: Idcfa252e3bfa9d74e27fe4ad8f8623aa01aa9c5e
2010-12-03 17:33:09 -08:00
Louis Huemiller
0404814194 Remove const_cast to layer handle
Change-Id: Ica1e089cb56b5f9f46ab87abf735ffe7237fc926
2010-12-01 12:29:36 -08:00
Jamie Gennis
4ba398df17 Merge "Implement reducing the buffer count of a Surface." 2010-11-11 15:26:21 -08:00
Jamie Gennis
54cc83e8a4 Implement reducing the buffer count of a Surface.
Change-Id: I7f979c60c06d654aa8265002836277434bc1a64f
Bug: 3095167
2010-11-11 14:06:38 -08:00
Jamie Gennis
37b126a3b2 Remove a problematic empty update optimization.
This change removes an optimization from SurfaceFlinger that skipped
composition when it got window updates that had an empty dirty region.
This optimization caused problems because it would skip the hwcomposer
set call, which could leave the window's previous frame buffer bound to
an overlay plane.  When the application subsequently dequeued and tried
to lock its next buffer (which would be the buffer currently bound to
the overlay), the lock call would block until the next hwcomposer set
call (which may never happen).

Change-Id: I563b626a1d52c1f30eb82489eae0ceb4edc79936
Bug: 3138752
2010-11-10 15:09:09 -08:00
Mathias Agopian
c23902b27f am 5c0efef9: am 7d452f69: Merge "really fix [3118445] Transform * Transform does not work as expected" into gingerbread 2010-10-27 23:48:26 -07:00
Mathias Agopian
c2dba08cc6 am 7d452f69: Merge "really fix [3118445] Transform * Transform does not work as expected" into gingerbread 2010-10-27 23:46:25 -07:00
Mathias Agopian
883dffaa00 really fix [3118445] Transform * Transform does not work as expected
Two bugs were counter acting each other.
- rotation matrices are on the left-hand side of multiplies
- the transform of the overlay is applied before that of the layer

Change-Id: Ia79bd368e9b719235c89ecf244ea263f01ce906a
2010-10-27 18:04:11 -07:00
Mathias Agopian
d4a36d5102 am e1ca532d: am 457bed2b: Merge "fix [3123221] Video sticks playing back upside down following orientation switch" into gingerbread
Merge commit 'e1ca532d72cbfacdce794f8bb4d439e609ec9871'

* commit 'e1ca532d72cbfacdce794f8bb4d439e609ec9871':
  fix [3123221] Video sticks playing back upside down following orientation switch
2010-10-25 13:53:33 -07:00
Mathias Agopian
bb35a6322e am b4645353: am ce4d36ad: Merge "fix [3118445] Transform * Transform does not work as expected" into gingerbread
Merge commit 'b4645353090f1bdd5cc1d4ab98feac7ccf966368'

* commit 'b4645353090f1bdd5cc1d4ab98feac7ccf966368':
  fix [3118445] Transform * Transform does not work as expected
2010-10-25 13:53:26 -07:00
Mathias Agopian
a7a8f05d8c am 457bed2b: Merge "fix [3123221] Video sticks playing back upside down following orientation switch" into gingerbread
Merge commit '457bed2bc6561dd67429dde238453fee8602fa9b' into gingerbread-plus-aosp

* commit '457bed2bc6561dd67429dde238453fee8602fa9b':
  fix [3123221] Video sticks playing back upside down following orientation switch
2010-10-25 13:38:15 -07:00
Mathias Agopian
46135ee9a3 am ce4d36ad: Merge "fix [3118445] Transform * Transform does not work as expected" into gingerbread
Merge commit 'ce4d36ad729f83253d4c5ec9906148f45cc00f8e' into gingerbread-plus-aosp

* commit 'ce4d36ad729f83253d4c5ec9906148f45cc00f8e':
  fix [3118445] Transform * Transform does not work as expected
2010-10-25 13:38:11 -07:00
Mathias Agopian
38e5c8ef89 Merge "fix [3123221] Video sticks playing back upside down following orientation switch" into gingerbread 2010-10-25 13:31:11 -07:00
Mathias Agopian
d3caac954c fix [3123221] Video sticks playing back upside down following orientation switch
the overlay wasn't reconfigured when the screen-orientation changed. It was
only done when a parameter of the surface itself changed.

Change-Id: I0ca0925bf58ded4c91ab89d12cb1fe4d1477c96c
2010-10-24 19:03:58 -07:00
Mathias Agopian
0694d0f3b3 fix [3118445] Transform * Transform does not work as expected
The problem wasn't in the multiply operator, but rather in the code
that built the transform from the HAL bitmask.

We now use the multiply operator to build the Transform from the bitmask,
which guarantees, it'll always be correct.

Also added a simple test for Transform.

Change-Id: I09bf3b0e51d92f59d83ea91c4cc94fc2aa0bf227
2010-10-24 14:53:05 -07:00
Mathias Agopian
47a79466a7 am fb31036f: am 583fefc8: Merge "Use the context_priority extension when present." into gingerbread
Merge commit 'fb31036fd844444c395a2ae9c97439eec9f774e4'

* commit 'fb31036fd844444c395a2ae9c97439eec9f774e4':
  Use the context_priority extension when present.
2010-10-21 13:48:36 -07:00
Mathias Agopian
db02bde788 am 583fefc8: Merge "Use the context_priority extension when present." into gingerbread
Merge commit '583fefc8dcadecc7fc933513d3569dd9c16c100c' into gingerbread-plus-aosp

* commit '583fefc8dcadecc7fc933513d3569dd9c16c100c':
  Use the context_priority extension when present.
2010-10-20 21:28:25 -07:00
Mathias Agopian
3c85e4ad5a Merge "Use the context_priority extension when present." into gingerbread 2010-10-20 20:04:46 -07:00