Commit Graph

913 Commits

Author SHA1 Message Date
Jesse Hall
fee52e20b9 am f3fa0712: am 93573e91: Merge "Treat composition frames with no layers as using GLES composition" into klp-dev
* commit 'f3fa0712282e760c316f44cba05f884f9399b98f':
  Treat composition frames with no layers as using GLES composition
2013-10-02 09:57:03 -07:00
Jesse Hall
10a9ca1c69 am 72d270c5: am b716e570: Set the outbuf acquire fence after we actually have it.
* commit '72d270c5f0918d1dc7a6a1774b80469c9f28b7ea':
  Set the outbuf acquire fence after we actually have it.
2013-10-02 09:57:02 -07:00
Jesse Hall
93573e91c2 Merge "Treat composition frames with no layers as using GLES composition" into klp-dev 2013-10-02 14:54:03 +00:00
Jesse Hall
0c6fd94c13 am 92d7c3ee: am b65f32eb: Fix two EGLConfig selection bugs
* commit '92d7c3ee03109cf2d465a103b828b7d7d3ee9848':
  Fix two EGLConfig selection bugs
2013-10-01 20:58:49 -07:00
Jesse Hall
b716e57048 Set the outbuf acquire fence after we actually have it.
In GLES-only mode, we don't have the outbuf acquire fence until after
GLES composition is done for the frame. We were setting the fence in
HWC's state immediately after dequeueing the buffer from the consumer,
before GLES had started. This fence got passed through HWC and on to
the consumer, so the consumer was reading the buffer before GLES was
done writing to it.

Now we update HWC's state just before set(), when we know we have the
right fence.

Bug: 11000763
Change-Id: Iea9db4c69634c352dc2d600f0bdb6bef2a432636
2013-10-01 17:25:20 -07:00
Mathias Agopian
ac68302e1c only clear FB when asked for the opaque layer
a layer need to be considered NOT opaque if it has a
plane-alpha.

Bug: 10846930
Change-Id: Ibd8981b63ede4560c7096bacc4cff46a7eb2a8bb
2013-10-01 15:36:52 -07:00
Jesse Hall
d05a17fbb3 Treat composition frames with no layers as using GLES composition
When there are no window layers for a display, SurfaceFlinger clears
the undefined region using GLES. Some of the places that check for
GLES composition weren't considering this special case, in particular:

- We were skipping the eglSwapBuffers() on these frames.
- We were putting VirtualDisplaySurface in HWC-only composition mode.

This change centralizes the logic for this special case.

Bug: 10957068
Change-Id: I2deaf2ed101e8ea76708862a6bb67751b6078794
2013-09-30 17:08:28 -07:00
Jesse Hall
b65f32ebe2 Fix two EGLConfig selection bugs
This fixes two bugs introduced by
  Change-Id: Ia8cc084c02a0e3de910def024da8a08d02bbd89d

(a) There is no invalid EGLConfig value, in particular zero is valid.
    Checking return values of eglGetConfigs and eglChooseConfig is the
    only way to determine success.
(b) The "simple" EGLConfig query used as the emulator fallback should
    not include EGL_RECORDABLE; the emulator doesn't have it.

Bug: 10935622
Change-Id: Ib798a24e7cf06a679811c46eaa45d39174a715ec
2013-09-30 10:49:16 -07:00
Mathias Agopian
ff98f3e598 am 338acd68: am 86206b41: Merge "fix initialization of framebuffer target crop rect on hwc 1.3" into klp-dev
* commit '338acd6869532f2684cbd1e4f273eaffc6d4ef6d':
  fix initialization of framebuffer target crop rect on hwc 1.3
2013-09-26 12:47:35 -07:00
Mathias Agopian
2b3d0c4079 am 0ff4b283: am 6da15f46: fix crashers with wifi/virtual displays
* commit '0ff4b28396d77a0ed2f191836895a891108a8b5b':
  fix crashers with wifi/virtual displays
2013-09-26 12:47:35 -07:00
Mathias Agopian
86206b41b2 Merge "fix initialization of framebuffer target crop rect on hwc 1.3" into klp-dev 2013-09-26 19:41:22 +00:00
Mathias Agopian
8f63c2049b fix initialization of framebuffer target crop rect on hwc 1.3
Bug: 10936771
Change-Id: If283e5e231ca34b93e0b1784bb4e8e4c7bfd75de
2013-09-25 20:44:34 -07:00
Mathias Agopian
6da15f46f5 fix crashers with wifi/virtual displays
Bug: 10647742
Change-Id: I4b8ed9da52ef95af3a3b3a04b98514a3776a674d
2013-09-25 20:40:07 -07:00
Mathias Agopian
1c479c56da am 754bad45: am d555684c: reinstate black-screenshot debugging code
* commit '754bad4534e9a2de8b4e3ecbe097993c71246f91':
  reinstate black-screenshot debugging code
2013-09-20 11:20:44 -07:00
Mathias Agopian
4d5755389d am f589dd29: am e2a3e872: Merge "Fix GLES context version selection" into klp-dev
* commit 'f589dd2915587994d3dd36eff2191962fe0b71c0':
  Fix GLES context version selection
2013-09-20 11:19:58 -07:00
Mathias Agopian
d555684cb3 reinstate black-screenshot debugging code
turned off by default.

Bug: 10809349
Change-Id: I3e6b8c7860e6b0e122b8f07de4020967cd1f005c
2013-09-19 17:09:26 -07:00
Christopher Ferris
6de9653ac8 Merge "Remove unnecessary include." 2013-09-19 23:16:10 +00:00
Christopher Ferris
d142f4b787 Remove unnecessary include.
All these files are including utils/CallStack.h, but none of the code
uses any CallStack objects.

Change-Id: I38c3a346a3bd0ddbff368d0f7f8b3f3d78fc0432
2013-09-19 15:45:03 -07:00
Mathias Agopian
2185f8b420 Fix GLES context version selection
Explicitly selects an ES 2.0 config first, then an ES 1.x config,
before attempting the fallback path for the emulator.

Bug: 10820214
Change-Id: Ia8cc084c02a0e3de910def024da8a08d02bbd89d
2013-09-18 16:20:26 -07:00
Mathias Agopian
0f0e845113 am a7e1660b: am c1c05de4: fix camera API 2.0 orientation
* commit 'a7e1660b257326f99261e7c9b2d58c9d2e68d0b0':
  fix camera API 2.0 orientation
2013-09-18 15:36:00 -07:00
Mathias Agopian
c1c05de415 fix camera API 2.0 orientation
we add a flag to ANativeWindow::setBufferTransform that means
"apply the inverse rotation of the display this buffer is displayed
onto to".

Bug: 10804238
Change-Id: Id2447676271950463e8dbcef1b95935c5c3f32b2
2013-09-17 23:45:22 -07:00
Mathias Agopian
7229e98229 am 3f342c11: am 02b62df7: Merge "Make sure do disconnect from a BQ when its client dies." into klp-dev
* commit '3f342c113360eacc1e9c1ff481cb03f700a50117':
  Make sure do disconnect from a BQ when its client dies.
2013-09-17 14:35:29 -07:00
Mathias Agopian
02b62df711 Merge "Make sure do disconnect from a BQ when its client dies." into klp-dev 2013-09-17 21:31:14 +00:00
Jesse Hall
cd9fd427ac am b8080d9a: am 2a36497e: Merge "Stop using default value for Surface producerControlledByApp parameter" into klp-dev
* commit 'b8080d9a3b760617c5dde7b1d2d63aa2bcecf3a7':
  Stop using default value for Surface producerControlledByApp parameter
2013-09-16 20:32:34 -07:00
Mathias Agopian
365857df8b Make sure do disconnect from a BQ when its client dies.
Bug: 5679534

Change-Id: If447e8673df83fe0b1d6210641e0a48522501a53
2013-09-16 16:15:21 -07:00
Jesse Hall
83cafffeac Stop using default value for Surface producerControlledByApp parameter
Bug: 10785749
Change-Id: Ifbf9340e5eabe621a69e990ec3e05ac51f8db66a
2013-09-16 15:39:55 -07:00
Alan Viverette
9c5a333511 Add API for pushing color transforms to SurfaceFlinger
BUG: 9057596
Change-Id: Iea0953366eac875b7968897a75472c25a137edb5
2013-09-12 20:04:35 -07:00
Mathias Agopian
ff2ed70fa3 color blindness enhancement
This is an attempt at improving the experience of
users with color vision impairement.

At this time this feature can only be enabled for
debugging:

  adb shell service call SurfaceFlinger 1014 i32 PARAM

  with PARAM:
   0 : disabled
   1 : protanomaly/protanopia simulation
   2 : deuteranomaly/deuteranopia simulation
   3 : tritanopia/tritanomaly simulation
  11, 12, 13: same as above w/ attempted correction/enhancement

The enhancement algorithm tries to spread the "error"
such that tones that would otherwise appear similar can be
distinguished.

Bug: 9465644

Change-Id: I860f7eed0cb81f54ef9cf24ad78155b6395ade48
2013-09-04 22:11:15 -07:00
Mathias Agopian
9b5534b0e5 Merge changes I8283a989,I64add89a into klp-dev
* changes:
  switch to use mat4
  vector and matrix classes for graphics use
2013-08-31 01:30:10 +00:00
Jesse Hall
87967c1869 Merge "Force async behavior for the virtual display output BufferQueue" into klp-dev 2013-08-30 21:14:55 +00:00
Jesse Hall
8db92553e9 Force async behavior for the virtual display output BufferQueue
Bug: 10551087
Change-Id: I40bbb2b87d64420939a0ea309254f281437dab56
2013-08-29 16:09:11 -07:00
Mathias Agopian
19733a3279 minor clean-up of the GLESRenderer
Change-Id: I978dea25b7687fbbbb283f09c24e115d9bad49a2
2013-08-28 18:13:56 -07:00
Mathias Agopian
931bda1c47 reset the gl viewport at each frame for each display
Bug: 10097128, 9506003
Change-Id: Ie0403a631e339a9134216224f3366f46ece58b53
2013-08-28 18:11:46 -07:00
Mathias Agopian
a8c386f1c3 switch to use mat4
Change-Id: I8283a989cfd2b74d53958150bc90298bc083fee7
2013-08-26 20:42:07 -07:00
Mathias Agopian
f2e4fcd96c Merge changes I34935d21,If423cd29 into klp-dev
* changes:
  handle several vsync signal correctly
  only use format compatible with CPU consumers
2013-08-24 00:12:42 +00:00
Mathias Agopian
ed127ea383 Merge "make sure SF initialization is ran at target priority and correct thread group" into klp-dev 2013-08-24 00:12:05 +00:00
Mathias Agopian
9414d67f46 make sure SF initialization is ran at target priority and correct thread group
SF can spawn threads (indirectly) during initialization
and we want those to be spawned at URGENT_DISPLAY_PRIORITY
(in theory they should set their own, but some code lives
in vendor libraries and doesn't).

Bug: 10430209
Change-Id: I5b3a8f979297de287614c8eafd8267bef1176e4b
2013-08-23 17:10:32 -07:00
Mathias Agopian
bcab7b17b1 fix DimLayer in GLES2.0 SF
DimLayer state wasn't initialized properly.

Bug: 10442967
Change-Id: I384c1d85c58c96ae29d5daa1fabee9f4ce003501
2013-08-23 16:12:34 -07:00
Mathias Agopian
bef42c50eb handle several vsync signal correctly
Change-Id: I34935d2197ce8e914fef2f110896e47b44225ad2
2013-08-21 17:45:46 -07:00
Mathias Agopian
4ceff3d5ef screenshot layers wouldn't work in some cases
specifically when the display size and the screenshot window
size didn't match, the buffer would be rejected.
We simply fix this by setting the scalling mode to
"SCALE_TO_WINDOW".

Bug: 9992306
Change-Id: Ib821767899af330bb70d3cbbfa7d41b02794a075
2013-08-21 15:25:50 -07:00
Mathias Agopian
a525483dc7 Merge "Fix a bug where non-cropped layer could be scaled incorrectly" into klp-dev 2013-08-21 18:55:19 +00:00
Jesse Hall
d2cf8c2f07 Merge "Provide HWC prepare with a valid output buffer" into klp-dev 2013-08-21 14:38:51 +00:00
Jesse Hall
7127d17db1 Merge "Fix HWComposer dumping of float source crops" into klp-dev 2013-08-21 14:37:51 +00:00
Andy McFadden
32551478fc Merge "Fix virtual displays for HWC 1.0" into klp-dev 2013-08-21 14:31:35 +00:00
Mathias Agopian
0e8f1443b8 Fix a bug where non-cropped layer could be scaled incorrectly
If a layer is not cropped but its bounds are outside of the
viewport (i.e.: clipped), the crop rectangle passed to
hw composer would be invalid because it started invalid
in the first place (to indicate "no crop").

Bug: 10410944
Change-Id: I4ae4d49a1adef0be7fa4304ecf84b1a5b7d03fe0
2013-08-20 21:46:45 -07:00
Jesse Hall
028dc8f2d7 Provide HWC prepare with a valid output buffer
We weren't dequeing and setting the output buffer until just before
set(). This didn't allow HWC to make decisions in prepare() based on
the output buffer format, dimensions, etc.

Now we dequeue the output buffer at the beginning of the composition
loop and provide it to HWC in prepare. In GLES-only rendering, we may
have to cancel the buffer and acquire a new one if GLES requests a
buffer with properties different than the one we already dequeued.

Bug: 10365313
Change-Id: I96b4b0a851920e4334ef05080d58097d46467ab8
2013-08-20 16:35:32 -07:00
Jesse Hall
353ddc6e77 Fix HWComposer dumping of float source crops
Change-Id: I45a9344b5fab17ccb54bebd01382d738a03860e6
2013-08-20 16:11:50 -07:00
Andy McFadden
22a99f0fc2 Fix virtual displays for HWC 1.0
We weren't swapping the buffers.

Bug 10366404

Change-Id: I43eb7648231bedf24899da6fc0d9acc09e0b047e
2013-08-20 16:04:47 -07:00
Mathias Agopian
4f4f094348 SurfaceFlinger now runs in the process's main thread
it used to spawn its own thread and return the main thread
to the binder thread pool -- this was confusing the naming
of things in the kernel.

Bug: 10331839

Change-Id: I2d13a6d73409a38109300fcbe6a04b4c41cb5d00
2013-08-20 11:16:45 -07:00
Andy McFadden
90f59bf9eb Merge "Re-enable frame dropping for non-auto timestamps" into klp-dev 2013-08-19 14:27:28 +00:00
Jesse Hall
7c6278de6e Merge "Use new HWC display type/count constants." into klp-dev 2013-08-18 04:31:24 +00:00
Mathias Agopian
49457ac092 Encapsulate textures into their own Texture class
the main reason for doing this is so that we can have
access to informations about a texture (like its dimension)
close to where we generate and use shaders in ES 2.0.
Previously, there wasn't any way to get to a texture's size
from a RenderEngine implementation.

Bug: 8679321

Change-Id: I388b338a70d07e3e8177dde248710ea1e4c82dff
2013-08-16 16:29:02 -07:00
Andy McFadden
3c25621ad7 Re-enable frame dropping for non-auto timestamps
This change adds an entire field to note whether the timestamp was
auto-generated by Surface or supplied by the application.

The value is used when deciding whether or not to drop frames based
on buffer presentation timestamps.  If a desired presentation time
was set explicitly, BufferQueue will use that value to decide if a
frame should be dropped.  If the timestamp was generated by Surface
at the time the buffer was queued, the timestamp is ignored.

Bug 10151804

Change-Id: Ibd571a7578351063b813cbdad2ddbeed70655ba5
2013-08-16 15:15:16 -07:00
Jesse Hall
9e663de4fe Use new HWC display type/count constants.
Change-Id: I774d0c68906ac6dc69268f708c30a6b0868b8816
2013-08-16 14:28:37 -07:00
Jesse Hall
e048a4374c Merge "Add support for EGL_KHR_gl_colorspace" into klp-dev 2013-08-15 23:17:49 +00:00
Mathias Agopian
e0ec2a9568 Merge "Fix ES2 composition on some devices" into klp-dev 2013-08-15 23:12:26 +00:00
Mathias Agopian
2eaefe198a Simplify handling of opaque layers in shader generation
just ensure the alpha value is 1.0 in the opaque case
when reading the color from the texture or the
global color.

Bug: 8679321

Change-Id: Ia38b30e97c3bce5a2d534a40c0d66e0bfc3ea40d
2013-08-15 15:11:01 -07:00
Mathias Agopian
458197de00 Fix ES2 composition on some devices
- turns out fragment shaders don't have default precision by default
- GLES 1.x extensions that became core in GLES 2.0 don't always work
  as extensions in GLES 2.0 (!)

Bug: 8679321
Change-Id: I5a4a93e158247910399325a965af5d2e3bbece9b
2013-08-15 14:56:51 -07:00
Andy McFadden
6db4ff6218 Disable GLES 2.x rendering
Bug 10340705

Change-Id: I91f3baf0d79655d8d031c100d0b116f745c2fbef
2013-08-15 10:39:11 -07:00
Andy McFadden
892f22dcb9 Initialize mIndent
Bug 10334731

Change-Id: Ia3aa118a1516cc480b0d85179b78c4447f982dd6
2013-08-15 10:05:01 -07:00
Mathias Agopian
5cdc8994a0 don't reallocate the mesh each time we use it
the Mesh object can be part of each Layer (at least currently).
also reworked the Mesh code a bit to make it easier to access
the vertex data.

Change-Id: I0490851ba898f0aa2e55b62958dcd8bdb535e98b
2013-08-13 20:51:23 -07:00
Mathias Agopian
3f84483382 SurfaceFlinger now uses GLES 2.x when available
Bug: 8679321

Change-Id: I2b152d01fb4e2de2ea9fe87f1ddbd6826d7520d7
2013-08-13 16:07:45 -07:00
Mathias Agopian
5ff5a84e48 allow "system" screenshots even when the secure flag is set
we need too allow this case so that things like the rotation
animation can work.
with this change we only permit these screenshot if the
destination is SurfaceFlinger itself.

Bug: 10235036
Change-Id: I66fea5391e52b0d7f17f25827572b236f2d9eb71
2013-08-13 15:58:38 -07:00
Jesse Hall
c2e41222bf Add support for EGL_KHR_gl_colorspace
Change-Id: I684d0b8556cd6c84ee4b4d67e1bb95c3b96fccfb
2013-08-13 12:10:51 -07:00
Mathias Agopian
a6bb107434 make sure we have a context when creating the 1st surface
also add an option to dump the stack trace when
calling a GL function without a context.

Change-Id: I57b72bb8c322ac4253c3077bf150621bd9863b69
2013-08-08 16:38:06 -07:00
Jesse Hall
6c913be9ca Add ISurfaceComposer::destroyDisplay
Bug: 10191053
Change-Id: Ia89286f95421344a60ffedaaca5825c4e3cd7f9e
2013-08-08 13:12:29 -07:00
Jesse Hall
ff866e7642 Merge "Set the swap interval of virtual display surfaces to 0" 2013-08-07 15:23:00 +00:00
Jesse Hall
f460f55c84 Set the swap interval of virtual display surfaces to 0
This prevents slow/malicious virtual display consumers from
backpressuring SurfaceFlinger and preventing it from updating other
displays.

Bug: 10193714
Change-Id: I3e877d97202628d2d9abea24b66576f38299c14d
2013-08-06 19:32:02 -07:00
Mathias Agopian
3ca76f416b remove support for glReadPixels screenshot path
this was only needed on some chipset we're not
supporting in KLP.

Change-Id: I2e8fc07f135030bd61d2e241a8e426f1a4316425
2013-08-06 16:07:33 -07:00
Mathias Agopian
db89edc94b All consumers now take an IGraphicBufferConsumer instead of a BufferQueue
this means they only have access to the consumer end of
the interface. we had a lot of code that assumed consumers
where holding a BufferQueue (i.e.: both ends), so most of
this change is untangling in fix that

Bug: 9265647
Change-Id: Ic2e2596ee14c7535f51bf26d9a897a0fc036d22c
2013-08-06 20:05:36 +00:00
Mathias Agopian
a4e19521ac Binderize the consumer side of BufferQueue
While currently untested, this should allow to move the
BuffereQueue in the consumer process and have everything
work as usual.

Bug: 9265647

Change-Id: I9ca8f099f7c65b9a27b7e7a3643b46d1b58eacfc
2013-08-01 17:20:08 -07:00
Mike J. Chen
aaff4ef717 SurfaceFlinger: Set the result of binderized screencapture
A recent change to screencapture to have the call to
IGraphicBufferProducer happen on the incoming binder
thread didn't set the result so the result was always
returned as NO_ERROR.

This made screencap fail on some devices (e.g. Wolfie)
which relies on some kind of fallback mechanism to
generate the screencap but the fallback mechanism
doesn't get triggered because the error isn't returned.

Bug: 9989385

Change-Id: I2aee91ea1034869fcbb0f49b9a0087c3cff43bbe
Signed-off-by: Mike J. Chen <mjchen@google.com>
2013-07-30 10:24:22 -07:00
Mathias Agopian
ad678e18b6 single buffer mode for BufferQueue
Bug: 9891035
Change-Id: Id1ab5f911a6dc4c1d8235e65775b3d3635231ad4
2013-07-26 18:45:02 -07:00
Mathias Agopian
c2414bb098 get rid of HAL pixelformats 5551 and 4444
Change-Id: I39409103144c1ba09078c4ddc323a58987fb09ea
2013-07-26 15:43:33 -07:00
Mathias Agopian
dd533712f8 make transparent pixels transparents again
apparently boolean logic in hard...

Change-Id: Ie70401fe12e0fa00b0b8c7cc475c1438cdbbf531
2013-07-26 15:31:39 -07:00
Mathias Agopian
5773d3f5b2 get rid of PixelFormatInfo and simplify things
Change-Id: I025a362cc12d5b9b794fac14be500e25aab65396
2013-07-25 19:24:31 -07:00
Jamie Gennis
1d4f79c482 Merge "surfaceflinger: add frame duration logging" 2013-07-24 20:47:37 +00:00
Jamie Gennis
6547ff4327 surfaceflinger: add frame duration logging
Change-Id: Ib414a45e7e191f23a2726cbbbeb606e9ce68a3b5
2013-07-23 17:28:47 -07:00
Mathias Agopian
7ffaa7c60d move services executables sources in their respective src folder
Change-Id: Ic65434a26c7fed1699abf0851fec6faa40e09c0c
2013-07-22 12:25:18 -07:00
Mathias Agopian
7cdd786fa8 Make ANW.setSwapInterval(0) work again
we can now queue/dequeue a buffer in asynchrnous mode by using the
async parameter to these calls. async mode is only specified
with those calls (it is not modal anymore).

as a consequence it can only be specified when the buffer count
is not overidden, as error is returned otherwise.

Change-Id: Ic63f4f96f671cb9d65c4cecbcc192615e09a8b6b
2013-07-19 17:38:01 -07:00
Mathias Agopian
595264f1af BufferQueue improvements and APIs changes
this is the first step of a series of improvements to
BufferQueue. A few things happen in this change:

- setSynchronousMode() goes away as well as the SynchronousModeAllowed flag
- BufferQueue now defaults to (what used to be) synchronous mode
- a new "controlled by app" flag is passed when creating consumers and producers
  those flags are used to put the BufferQueue in a mode where it
  will never block if both flags are set. This is achieved by:
  - returning an error from dequeueBuffer() if it would block
  - making sure a buffer is always available by replacing
    the previous buffer with the new one in queueBuffer()
    (note: this is similar to what asynchrnous mode used to be)

Note: in this change EGL's swap-interval 0 is broken; this will be
fixed in another change.

Change-Id: I691f9507d6e2e158287e3039f2a79a4d4434211d
2013-07-18 22:28:18 -07:00
Jesse Hall
bce7611e8e Fix build -- update for function signature change
Change-Id: I9c2448d5853c69ec7e962847fdaba9a99906cc42
2013-07-16 13:46:20 -07:00
Jesse Hall
3bc3840888 Merge "Rewrite VirtualDisplaySurface" 2013-07-16 20:29:30 +00:00
Mathias Agopian
7f069d79e7 Merge "always pass the BufferQueue explicitely to consumers" 2013-07-16 02:17:58 +00:00
Jesse Hall
38efe86d94 Rewrite VirtualDisplaySurface
The previous implementation assumed that the HWC could read and write
the same buffer on frames that involved both GLES and HWC composition.
It turns out some hardware can't do this. The new implementation
maintains a scratch buffer pool to use on these mixed frames, but on
GLES-only or HWC-only frames still does composition directly into the
output buffer.

Bug: 8384764
Change-Id: I7a3addb34fad9bfcbdabbb8b635083e10223df69
2013-07-15 13:59:41 -07:00
Mathias Agopian
8f938a5338 always pass the BufferQueue explicitely to consumers
Change-Id: I883b0a7b19d8e722f9ab714ba6f49e658b02ca86
2013-07-12 22:06:26 -07:00
Jesse Hall
883140d0bf Merge "SurfaceFlinger: EventThread: Fix Vsync array size." 2013-07-12 23:31:57 +00:00
Saurabh Shah
5c876fa6b2 SurfaceFlinger: EventThread: Fix Vsync array size.
Vsync array size is specified as HWC_DISPLAY_TYPES_SUPPORTED whose
value luckily happens to be 2. That enum is actually used for querying
hwc for the number of displays supported.

The implementation file EventThread.cpp correctly accesses the array
upto HWC_NUM_DISPLAY_TYPES

Change-Id: I36e3f0913e7d6fda7bbf4449c1fb32c7f18bb934
Signed-off-by: Amara Venkata Mastan Manoj Kumar<manojavm@codeaurora.org>
Signed-off-by: Saurabh Shah <saurshah@codeaurora.org>
2013-07-12 16:29:48 -07:00
Andy McFadden
c33f9a76b5 Merge "Pay attention to buffer timestamps" 2013-07-11 14:40:45 +00:00
Andy McFadden
1585c4d9fb Pay attention to buffer timestamps
When acquiring a buffer, SurfaceFlinger now computes the expected
presentation time and passes it to the BufferQueue acquireBuffer()
method.  If it's not yet time to display the buffer, acquireBuffer()
returns PRESENT_LATER instead of a buffer.

The current implementation of the expected-present-time computation
uses approximations and guesswork.

Bug 7900302

Change-Id: If9345611c5983a11a811935aaf27d6388a5036f1
2013-07-10 15:38:40 -07:00
Mathias Agopian
6b44267a3b fix SF buffer cropping
When a buffer had a crop (meaning its content is scaled to the window size)
and a window crop was defined, the resulting crop couldn't be expressed
properly because h/w composer's API was limited to integers, since
this is fixed in h/w composer 1.3, we take adventage of this to
make sure we get the correct crop.

this bug could result in the buffer being scaled by an incorrect ratio and
be slightly offset; moreover, it would produce different results from the
GL code path, which is always correct.

Change-Id: I8e20e00b6e26177d14f4ab4d2cd581e26c818892
2013-07-10 15:08:29 -07:00
Mathias Agopian
2ed0fe59b4 fix a bug where surfaceflinger and system_server could deadlock
because surfaceflinger handles screenshot in a different
    thread from the binder thread that requested it and because
    the IGraphicBufferProducer is a synchronous interface
    calling back into the system server; it is possible for
    the latter to run out of binder threads (b/c it holds
    a lock while calling into SF).

    The solution is to make sure all calls on IGraphicBufferProducer
    happen on the incoming binder thread. We achieve this by creating
    a IGBP wrapper which is given to the screenshot code.

    Bug: 8734824

Change-Id: I2be85660d9dc65d239d68f6d3ab3c973c13b34cc
2013-07-08 18:52:05 -07:00
Mathias Agopian
547e98f33c Merge "Refactor SF. Move all GL operations in their own class." 2013-07-08 22:50:01 +00:00
Mathias Agopian
fee2b463c5 Debug code for detecting all black pixels screenshots
Bug: 9120292
Change-Id: If60db32524db973bb1f905ba3cb415c2a1cd7e71
2013-07-08 22:28:37 +00:00
Mathias Agopian
875d8e1323 Refactor SF. Move all GL operations in their own class.
this is the first step to add support for GLES 2.x, this
change breaks the dependency of SF on GLES 1.x by moving
all operation into their own class.

Bug: 8679321

Change-Id: I0d2741eca2cefe67dfd9cf837cac10c4d126928b
2013-07-03 14:39:27 -07:00
Lajos Molnar
98d3d6ec12 SurfaceFlinger: fix releaseBuffer in updateTexImage
Allow releasing a buffer acquired in the past.

Change-Id: I3f27f1caec109c1a47286fc4d2235c6e1afe9022
Signed-off-by: Lajos Molnar <lajos@google.com>
Bug: 9516405
2013-06-27 11:53:03 -07:00
Mathias Agopian
1eae0ee494 clean-up SurfaceFlinger a bit
- most methods on Layer didn't need to be virtual
- more consistency in naming drawing/current state

Change-Id: Ieb7b4951b40fc673b807994ed21ae4aea7281068
2013-06-06 13:06:10 -07:00
Mathias Agopian
2e3a7f1e3d Merge "Basic binary event-log helpers" 2013-06-06 00:01:15 +00:00
Mathias Agopian
7cc6df5957 fix a possible deadlock when removing a layer and destroying a client
generally the last reference to a Layer is released in commitTransaction()
with mStateLock held. Layer itself only holds weak references to Client,
however, ~Layer() briefly promotes this weak reference -- during that time
the all other strong references to that Client go away, ~Layer is left with
the last one... then hell breaks loose as ~Client is called, which in turn
needs to acquire mStateLock.

We fix this by holding a temporary copy of the drawing state during
the transaction so that the side-effects of copying the current
state into the drawing state are seen only after mStateLock has
been released.

Bug: 9106453
Change-Id: Ic5348ac12283500ead87286a37565e8da35f1db2
2013-06-05 14:38:23 -07:00
Mathias Agopian
85cce376cb Basic binary event-log helpers
EventLog can be used from SurfaceFlinger to log jank
statistics events to the binary event log.

Change-Id: If0fbbe7d7111f10957697166d37fd0c3418109bb
2013-06-05 13:37:49 -07:00