Commit Graph

402 Commits

Author SHA1 Message Date
Mathias Agopian
e3c697fb92 Refactoring: Rename SurfaceTextureClient to Surface
Change-Id: Ibed34175ae273608393aaa5f0a7df207dc40d709
2013-02-14 19:19:05 -08:00
Mathias Agopian
ac9fa427d4 get rid of Surface identity and token
we use the IBinder instead.

Change-Id: I4aa0b58869ba43f19980013620051e5a261b062d
2013-02-13 15:27:08 -08:00
Jamie Gennis
1df8c34585 libgui: disallow NULL Fence pointers
This change eliminates the uses of a NULL sp<Fence> indicating that no waiting
is required.  Instead we use a non-NULL but invalid Fence object for which the
wait methods will return immediately.

Bug: 7892871
Change-Id: I5360aebe3090422ef6920d56c99fc4eedc642e48
2013-02-12 18:15:38 -08:00
Andy McFadden
466a192d20 Minor tweaks.
Change-Id: I9f82f574112141b6aa074c42303056cd52d5c478
2013-01-08 11:25:51 -08:00
Andy McFadden
2adaf04fab Rename ISurfaceTexture and SurfaceTexture
The C++ class names don't match what the classes do, so rename
ISurfaceTexture to IGraphicBufferProducer, and SurfaceTexture to
GLConsumer.

Bug 7736700

Change-Id: Ia03e468888025b5cae3c0ee1995434515dbea387
2012-12-18 13:10:48 -08:00
Jamie Gennis
c911ea5318 stop using a deprecated SurfaceTextureClient ctor
Change-Id: I8c8282a0debd551db290dd6849faf272a88c704c
2012-12-12 12:38:36 -08:00
Jamie Gennis
3c1ada9822 Merge "SurfaceTextureClient: remove a deprecated ctor" 2012-12-12 12:16:21 -08:00
Jamie Gennis
4def860030 SurfaceTextureClient: remove a deprecated ctor
Change-Id: Ibf2746fdca26851677cd90199c60eab80f6d0c73
2012-12-12 12:13:54 -08:00
Jamie Gennis
c6f04666c2 Merge "SurfaceFlinger: Move GraphicBufferAlloc to libgui" 2012-12-12 10:56:42 -08:00
Jamie Gennis
392edd88cb SurfaceFlinger: Move GraphicBufferAlloc to libgui
This change moves the GraphicBufferAlloc class from SurfaceFlinger to libgui.

Change-Id: Idf31d2004efa2651b60590733f73c4a7b831e8a9
2012-12-11 17:54:29 -08:00
Andy McFadden
97eba8904c Avoid unnecessary texture bind
In SurfaceFlingerConsumer, check to see if native fence sync is
enabled.  If so, defer the texture binding step to Layer::onDraw.

Change-Id: I7d4034a31c0143207eea2509dfa13ef3820f9b8c
2012-12-11 16:26:51 -08:00
Andy McFadden
bf974abe92 Refactor SurfaceTexture a bit.
Rearranges updateTexImage() so that the SurfaceFlinger-specific
behavior is in a new SurfaceFlingerConsumer subclass.

SurfaceTexture behavior should not be altered.  Instead of
acquire-bind-release we now do acquire-release-bind, but since
it's all done with the lock held there shouldn't be any
externally-visible change.

Change-Id: Ia566e4727945e2cfb9359fc6d2a8f8af64d7b7b7
2012-12-11 09:42:51 -08:00
Jamie Gennis
a436799668 am 50f8d285: am d4e70620: am 72c3f7d8: Revert "ConsumerBase: free buffers outside the lock"
* commit '50f8d2856b6644059b31684687842bf9c1f2e814':
  Revert "ConsumerBase: free buffers outside the lock"
2012-12-07 11:09:12 -08:00
Jamie Gennis
72c3f7d881 Revert "ConsumerBase: free buffers outside the lock"
This reverts commit b21a4e3b5f.
2012-12-07 10:33:07 -08:00
Jamie Gennis
b5fe96b813 am 05989772: am 3ed2736c: am b21a4e3b: ConsumerBase: free buffers outside the lock
* commit '05989772d5b46cd5328e88d546f04deef39cc3c8':
  ConsumerBase: free buffers outside the lock
2012-12-06 23:24:25 -08:00
Jamie Gennis
b21a4e3b5f ConsumerBase: free buffers outside the lock
This change makes ConsumerBase::onBuffersReleased hold a reference to all its
gralloc buffers until after the mutex is unlocked.  This prevents slow
gralloc::free calls from causing lock contention with rendering threads.

Bug: 7675940
Change-Id: I0ec805d1b612afeeecfffec03f982371d27d93be
2012-12-06 18:17:35 -08:00
Mathias Agopian
73d5662e4c fix typo that broke all the builds
cherry pick into master since auto-merger is blocked

Bug: 7584338
Change-Id: Ie7d7c238de1fd224b3b0bae9669a8dcb2f700a79
2012-11-19 22:13:49 -08:00
Mathias Agopian
764c197c6f fix typo that broke all the builds
Bug: 7584338
Change-Id: Ieb8c27a544ac583af9aa1e0376e33a673d2d9673
2012-11-19 16:50:24 -08:00
Mathias Agopian
bd3e837ec7 am c208cdd4: am 1d3612f1: am 2a8c49eb: fix an out-of-bounds memory access
* commit 'c208cdd402d767228a34074d589c6368cc656b7d':
  fix an out-of-bounds memory access
2012-11-19 15:17:27 -08:00
Mathias Agopian
2a8c49eb5d fix an out-of-bounds memory access
in this particular case, this OOB is always harmless
(and that's why it didn't get fixed from MR1), however,
it interfers with valgrind debugging.

Change-Id: Ic977e03287e59c4b124a89146c9023bd0cb540a8
2012-11-15 17:19:48 -08:00
Igor Murashkin
74284b9467 Merge "Change ConsumerBase's FrameAvailableListener to be a weak pointer" 2012-11-05 13:47:37 -08:00
Igor Murashkin
a4a3149a36 Change ConsumerBase's FrameAvailableListener to be a weak pointer
This prevents strong reference cycles when the listener implementation also
holds a strong pointer to the ConsumerBase

Bug: 7425644
Change-Id: I1514b13a32b18d421c902dddebec0765a989c55c
2012-11-05 13:39:02 -08:00
Jeff Brown
f3f7db6346 Allow global transactions to nest.
This change fixes a number of small glitches that can occur when
multiple components in the same process are updating surfaces.
One would expect that updates to disjoint sets of surfaces would
not collide but this is not the case.  The first component to
close the global transaction causes all pending updates to
be applied, including those that another component might not
have finished setting up if it also had an open transaction
at the same time.

Change-Id: I99345958581abbe0e1e325a5bcba37e8941a313a
2012-11-02 14:02:52 -07:00
Jamie Gennis
dd3cb84cfb SurfaceFlinger: add support for secure displays
This change adds support for displays that are not allowed to display surfaces
with the eSecure flag set.  All non-virtual displays are considered secure,
while virtual displays have their secure-ness specified at creation time.

Bug: 7368436
Change-Id: I81ad535d2d1e5a7ff78269017e85b111f0098500
2012-10-22 13:41:21 -07:00
Jamie Gennis
7f79a2bd5c Merge "BufferQueue: alloc without holding the lock" into jb-mr1-dev 2012-10-17 09:32:43 -07:00
Jamie Gennis
2d5e230292 SurfaceFlinger: add animation transactions
This change adds a transaction flag for WindowManager to indicate that a
transaction is being used to animate windows around the screen.  SurfaceFlinger
will not allow more than one of these transactions to be outstanding at a time
to prevent the animation "frames" from being dropped.

Bug: 7353840
Change-Id: I6488a6e0e1ed13d27356d2203c9dc766dc6b1759
2012-10-15 19:09:04 -07:00
Jamie Gennis
1efe099a51 BufferQueue: alloc without holding the lock
This change makes BufferQueue::dequeueBuffer release its mutex before
allocating new buffers.  This should alleviate lock contention in
SurfaceFlinger where SF's main thread can get blocked waiting for an allocation
operation to complete.

Bug: 7335075
Change-Id: I1b000539cc616a695afab2e9c68507db69e57b13
2012-10-11 20:08:26 -07:00
Jeff Brown
2a09bb3219 Add blankDisplay/unblankDisplay to SurfaceComposerClient.
Bug: 7309812
Change-Id: Ia401d642094a46c62f0d26c65da1d11341e203a1
2012-10-08 19:13:57 -07:00
Jesse Hall
9504eb915c Fix race condition in ConsumerBase::addReleaseFence()
This needs the ConsumerBase mutex locked, but wasn't locking it. Two
of the four places that called it already held the lock so were fine.
Now addReleaseFence() takes the lock itself, and I added
addReleaseFenceLocked() for the two already-locked callers, since in
one of them dropping the lock would be inconvenient.

Bug: 7289269
Change-Id: I7a5628adb516f8eec782aa6c14128202f96d7b0a
2012-10-05 14:40:50 -07:00
Stephen Hines
d920670f25 Fix missing parens in CleanSpec.mk.
Change-Id: I0440a942d3e685d619ec9cc402d3293cb3f52df1
2012-10-04 20:05:19 -07:00
Raph Levien
3fbbd076ad Fix broken CleanSpec.mk in libs/gui
The CleanSpec is missing parens, which causes $P to be interpreted as a
single variable, and the following printed to the log:

Clean step: rm -rf RODUCT_OUT/obj/SHARED_LIBRARIES/libgui_intermediates

This patch adds parens as needed.

Change-Id: I587998fa67a4884418c286360a577cdbb6ea9a21
2012-10-04 19:00:45 -07:00
Jamie Gennis
a573945df7 libgui: enable fence support for exynos5
Change-Id: Iffc48412b8c951116a956a3ac7dab8d75eed13da
Bug: 7238122
2012-10-03 15:55:14 -07:00
Jamie Gennis
3fd12e41af libgui: fix up compile options
This change adds debug info to SurfaceFlinger's dumpsys to indicate that the
USE_WAIT_SYNC compile option was enabled, and it removes the
ALLOW_DEQUEUE_CURRENT_BUFFER option.

Bug: 7238122
Change-Id: I70e08e34c2ef58aa6d2f88229e781a119f84b5a9
2012-10-03 15:05:58 -07:00
Jesse Hall
ba607d53c6 Add Fence::waitForever which logs a warning timeout, and use it
Bug: 7217641
Change-Id: If0c1a613ead307c4045a47824174bf40c72bc7d7
2012-10-02 16:29:46 -07:00
Andy McFadden
c01a79d77b Pass display arg to blank/unblank
This allows us to blank and unblank displays other than the built-in
display (e.g. HDMI).

Bug: 7240511
Change-Id: I89ea13f9e497be74c3e1231d0c62fb558e93e0f8
2012-09-28 13:04:16 -07:00
Iliyan Malchev
38b657265c Revert "Compatibility work around for bad graphics driver dependency."
This reverts commit a50b51c03a

Change-Id: Ibdcd776a7f241dbb2475403ea04f939249774c41
2012-09-27 15:52:12 -07:00
Andy McFadden
4803b74e2a Show build config in dumpsys SurfaceFlinger
This adds a line to the "dumpsys SurfaceFlinger" output that shows
build-time configuration values.

Example:
 Build configuration: [sf HAS_CONTEXT_PRIORITY] [libui] \
  [libgui USE_FENCE_SYNC]

Bug 7206633

Change-Id: Ibe1856b459d34a4be6ee83a4ebfd2807e6cc68a0
2012-09-25 11:31:46 -07:00
Mathias Agopian
e96e9e1093 fix a crasher in SurfaceTexture's setFilteringEnabled
bug: 7211067
Change-Id: Id8658a8df429d76c20ab9112858b38e52343dc9c
2012-09-24 19:26:11 -07:00
Jamie Gennis
7aff4a5de4 ConsumerBase: make fence names meaningful
Change-Id: I3580120cb63c027c327e80ec70e68650b75395de
2012-09-24 12:25:53 -07:00
Jamie Gennis
d1b330de41 SurfaceTexture: fix an out of bounds array write
This change fixes an issue causing the mEglContext member of a SurfaceTexture
to get incorrectly zeroed out.  This would happen when a call to
ConsumerBase::releaseBufferLocked resulted in the current buffer being freed.
Freeing the current buffer would set SurfaceTexture::mCurrentTexture to -1,
which would then be used by SurfaceTexture::releaseBufferLocked to reset the
current slot's EGLSyncKHR to EGL_NO_SYNC_KHR (= 0).  This would overwrite the
mEglContext field, resulting in context mismatch errors in
SurfaceTexture::doGLFenceWaitLocked.

The fix is to simply use the buffer slot that's passed in to
SurfaceTexture::releaseBufferLocked rather than mCurrentTexture.

Change-Id: I0e5e2bd88fcbb354c35a3744f317716fff3e0e41
2012-09-21 12:15:22 -07:00
Jeff Boody
42223f6fdd gui: conditionally set USE_NATIVE_FENCE_SYNC for msm8960
Change-Id: Ib7ad11597ef7c79162a0b0a49a1b8ae16d192c10
Signed-off-by: Iliyan Malchev <malchev@google.com>
2012-09-18 19:36:12 -07:00
Jamie Gennis
3941cb240d SurfaceTexture: default to doing GL sync
This change makes updateTexImage default to performing the necessary
synchronization and adds an argument for SurfaceFlinger to disable that
synchronization so that it can be performed lazily.

Change-Id: I7c20923cc786634126fbf7021c9d2541aa77be5d
Bug: 6991805
2012-09-18 10:59:40 -07:00
Andy McFadden
8dfa92fef9 Plumb display name into SurfaceFlinger
The Surface createDisplay() call takes a display name for debugging.
This change carries it through SurfaceFlinger and displays it in
the "dumpsys SurfaceFlinger" output.

Bug 7058158

Change-Id: I79f3474a8656ff1beb7b478e0dbf2c5de666118a
2012-09-18 09:20:23 -07:00
Andy McFadden
71f683ac8d New test
Added a test to confirm that the transform hint is being respected.

Bug: 7162482
Change-Id: I892fe962f8cf2759ff951b4f5065b9ac2732c3d1
2012-09-16 12:53:41 -07:00
Andy McFadden
6905205c8d Fix transform hints
The hints were being set a little too late, so the pre-rotation stuff
wasn't quite working.

Bug 7054997

Change-Id: Id8d5c626db7a76f768ba762a145b315878ee08e6
2012-09-16 11:39:09 -07:00
Andy McFadden
c272430960 Merge "Watch for SurfaceFlinger death" into jb-mr1-dev 2012-09-12 13:22:35 -07:00
Jamie Gennis
98ff0597bd SurfaceTexture: eglDestroySync after duping its fd
This change adds a call to eglDestroySync after we've dup'd the fd for the
Android fence that the EGLSyncKHR object wraps.

Change-Id: I4fa6ece863260793630d70bb9a69d6284d05d99e
2012-09-10 14:49:42 -07:00
Jamie Gennis
61e04b92bd SurfaceTexture: use eglWaitSync
This change adds a compile-option to use eglWaitSyncANDROID to ensure that
texturing operations that access the current buffer of a SurfaceTexture do not
occur until the buffer is completely written.  It also moves this
synchronization into a new SurfaceTexture method called doGLFenceWait and
changes SurfaceFlinger's Layer class to use that method rather than performing
its own wait on the fence.

Change-Id: I70afa88086ca7ff49a80e3cd03d423767db7cb88
2012-09-10 13:27:23 -07:00
Jamie Gennis
01dbf5539b SurfaceTexture: use EGL-created native fences
This change adds support for using Android fences that come from EGLSyncKHR
objects as the release fence for a buffer.

Change-Id: Ice192ce2ec001020f909a2018afdf0f17b24dec9
2012-09-09 12:58:23 -07:00
Andy McFadden
6652b3edcb Watch for SurfaceFlinger death
The ComposerService object wasn't watching for SurfaceFlinger
restarts, which doesn't usually matter because the app framework
restarts when SurfaceFlinger dies.  However, mediaserver continues
to run, which means its ComposerService object was trying to use
a dead handle, and playback of DRM movies was failing.

This adds a DeathRecipient listener and some logic to re-establish
the SurfaceFlinger connection.

Bug 6645813

Change-Id: I07581b881d3835601aa57d5358c8259d93bc4515
2012-09-06 18:54:42 -07:00