OSDN Git Service
Zach Reizner [Thu, 16 Jul 2015 21:45:10 +0000 (21:45 +0000)]
Merge "drm_hwcomposer: make the gl worker compositor not nested" into mnc-dr-dev
Sean Paul [Tue, 14 Jul 2015 19:51:52 +0000 (15:51 -0400)]
drm_hwcomposer: Add rotation support for hw planes
This patch adds support for transformed layers by using the
rotation property on drm planes.
Bug: chrome-os-partner:42093
Test: On smaug using
adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:<R>
Change-Id: I86bb8ef2f77b5d046a5fddd57db4b87070b5801f
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Zach Reizner [Thu, 16 Jul 2015 01:44:37 +0000 (18:44 -0700)]
drm_hwcomposer: make the gl worker compositor not nested
Change-Id: I06b75644408a570044499a9f603a478f3199661f
Sean Paul [Wed, 15 Jul 2015 19:19:40 +0000 (19:19 +0000)]
Merge "drm_hwcomposer: Dump active composition plane/crtc/dimension info" into mnc-dr-dev
Sean Paul [Wed, 15 Jul 2015 16:36:48 +0000 (12:36 -0400)]
drm_hwcomposer: Convert src_x,src_y to 16.16 fixed
We convert src_w,src_h, but failed to convert src_x.src_y. This
has the effect of never indexing into fb's properly.
Bug: chrome-os-parter:42311
Test: On smaug, open up the add google account screen, it should
not be shifted
Change-Id: Ic5cf654d93ea6c89c2cbd23c1d847fbc412a7d19
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 13 Jul 2015 16:41:37 +0000 (12:41 -0400)]
drm_hwcomposer: Dump active composition plane/crtc/dimension info
Should help with debugging if we can compare the SF layer info with
what drm_hwc is doing.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I333848b2141dff4c533f6dc22194826fdcf25dff
Stéphane Marchesin [Mon, 13 Jul 2015 23:40:12 +0000 (23:40 +0000)]
Merge "drm_hwcomposer: Print fps as float in dump()" into mnc-dr-dev
Stéphane Marchesin [Mon, 13 Jul 2015 23:39:52 +0000 (23:39 +0000)]
Merge "drm_hwcomposer: Convert v_refresh() to float" into mnc-dr-dev
Sean Paul [Mon, 13 Jul 2015 23:00:14 +0000 (23:00 +0000)]
am
e850fa2e: (-s ours) drm_hwcomposer: Process DPMS requests through compositor
* commit '
e850fa2e39da03695e03c1824a08f8be9b4cfdbf':
drm_hwcomposer: Process DPMS requests through compositor
drm_hwcomposer: Free failed composition in QueueComposition
Sean Paul [Mon, 13 Jul 2015 22:53:58 +0000 (22:53 +0000)]
am
1abf5c3f: (-s ours) drm_hwcomposer: Add composition type to DrmComposition
* commit '
1abf5c3fd61c1698e1ef7f9794cac5e22609a58c':
drm_hwcomposer: Add composition type to DrmComposition
Sean Paul [Mon, 13 Jul 2015 22:42:09 +0000 (22:42 +0000)]
am
e86fcfbb: (-s ours) drm_hwcomposer: Split the drm compositor into per-display threads
* commit '
e86fcfbb5c3f857efbcccb335c9a1a72a7a101cb':
drm_hwcomposer: Split the drm compositor into per-display threads
Stéphane Marchesin [Mon, 13 Jul 2015 19:35:41 +0000 (12:35 -0700)]
drm_hwcomposer: Print fps as float in dump()
This is more accurate than using ints which helps with profiling work.
Change-Id: I9ba8cc8a2b0e9c1fa02bc217444d4001f0e19009
Stéphane Marchesin [Sun, 5 Jul 2015 09:00:08 +0000 (02:00 -0700)]
drm_hwcomposer: Convert v_refresh() to float
We convert v_refresh() to return a float and instead of storing it,
compute it on the fly from the pixel clock + htotal/vtotal. This makes
the synthetic vblank computation much more accurate.
Change-Id: I2a0becf75eaca8ace30d176fdc813f3b57ba23a5
Sean Paul [Thu, 9 Jul 2015 21:51:50 +0000 (17:51 -0400)]
drm_hwcomposer: Use vector for overlay planes
For two reasons:
1- Because we don't need to use deque
2- Because we'll need to erase from the middle in the future,
and deque makes that difficult while iterating
BUG=chrome-os-parter:42311
TEST=Tested on smaug, turned on/off bunch of times, no dup icons
Change-Id: I306bdea15d7165f63afeb3b1e06774e2e9a1785f
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 9 Jul 2015 21:22:22 +0000 (17:22 -0400)]
drm_hwcomposer: Disable unused planes
Right before queuing up a composition, go through the
list of unused planes and add disable markers such
that they don't remain active when the new frame is
posted.
BUG=chrome-os-parter:42311
TEST=Tested on smaug, turned on/off bunch of times, no dup icons
Change-Id: Ic2e5e210873efb6dc41fd43682fe00db33c2a28e
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 25 Jun 2015 01:46:05 +0000 (18:46 -0700)]
drm_hwcomposer: Process DPMS requests through compositor
This patch changes the behavior of DPMS in hwcomposer from
applying asynchronously/immediately, to queuing in the
compositor and being processed in order. This is desirable
for a couple of reasons:
1- It ensures all frames set before set_power_mode are
shown on the screen before it turns off
2- We make sure we don't rmfb a framebuffer that is
currently applied to a disabled crtc.
The second reason above can cause the display to turn back
off once it's on since the fb will dereference to zero in
the kernel and it will disable the pipe without notifying
us.
Change-Id: I2aab9ee0353b12fecced46766ed2dbb64f0aef4b
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Fri, 10 Jul 2015 20:43:06 +0000 (16:43 -0400)]
drm_hwcomposer: Free failed composition in QueueComposition
Rather than maintaining ownership of the composition in the
caller, free the DrmComposition in QueueComposition on failure.
Change-Id: Id70e98ae1a8eef400bc29460bfc5a89c4707d617
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 25 Jun 2015 01:43:01 +0000 (18:43 -0700)]
drm_hwcomposer: Add composition type to DrmComposition
This allows us to have different types of compositions. This will
enable injection of non-frame related compositions such as dpms
and mode.
Change-Id: Ia62421c114c0c6bebccef3ce6ae936366b6aafe2
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 24 Jun 2015 21:38:49 +0000 (14:38 -0700)]
drm_hwcomposer: Split the drm compositor into per-display threads
This patch splits out the current single drm compositor with
per-display compositors, each with their own thread.
The per-display compositors are hidden behind a singleton
drm compositor. This allows us to maintain a whole-world view
of all displays involved in a frame. This becomes useful if
we start switching up crtcs/encoders for the displays.
This also allows us to issue one DrmComposition when the
frame is being assembled.
The single DrmComposition handles the plane allocation (since they
might switch between displays), and contains per-display compositions
which are used to store the layer->plane/crtc information for each
frame. The display compositors use the per-display compositions to
display the frame on their output.
Each display compositor receives a shared pointer to the frame's
DrmComposition on QueueComposition. As a result, both the composition,
and the per-display compositions, live for as long as any one
display is still using it. While this is sub-optimal (since a display
might never update again), this is probably fine for now.
Finally, splitting things up per-display will allow us to inject
non-compositing jobs into the composite queue. An example would be
turning the display off, or setting the mode. This ensures that all
frames in the composite queue are displayed before the mode changes
or the display is disabled.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I8a233ea64710b238f70acbcde1f6d771e297b069
Sean Paul [Thu, 25 Jun 2015 01:46:05 +0000 (18:46 -0700)]
drm_hwcomposer: Process DPMS requests through compositor
This patch changes the behavior of DPMS in hwcomposer from
applying asynchronously/immediately, to queuing in the
compositor and being processed in order. This is desirable
for a couple of reasons:
1- It ensures all frames set before set_power_mode are
shown on the screen before it turns off
2- We make sure we don't rmfb a framebuffer that is
currently applied to a disabled crtc.
The second reason above can cause the display to turn back
off once it's on since the fb will dereference to zero in
the kernel and it will disable the pipe without notifying
us.
Change-Id: I2aab9ee0353b12fecced46766ed2dbb64f0aef4b
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Fri, 10 Jul 2015 20:43:06 +0000 (16:43 -0400)]
drm_hwcomposer: Free failed composition in QueueComposition
Rather than maintaining ownership of the composition in the
caller, free the DrmComposition in QueueComposition on failure.
Change-Id: Id70e98ae1a8eef400bc29460bfc5a89c4707d617
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 25 Jun 2015 01:43:01 +0000 (18:43 -0700)]
drm_hwcomposer: Add composition type to DrmComposition
This allows us to have different types of compositions. This will
enable injection of non-frame related compositions such as dpms
and mode.
Change-Id: Ia62421c114c0c6bebccef3ce6ae936366b6aafe2
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 24 Jun 2015 21:38:49 +0000 (14:38 -0700)]
drm_hwcomposer: Split the drm compositor into per-display threads
This patch splits out the current single drm compositor with
per-display compositors, each with their own thread.
The per-display compositors are hidden behind a singleton
drm compositor. This allows us to maintain a whole-world view
of all displays involved in a frame. This becomes useful if
we start switching up crtcs/encoders for the displays.
This also allows us to issue one DrmComposition when the
frame is being assembled.
The single DrmComposition handles the plane allocation (since they
might switch between displays), and contains per-display compositions
which are used to store the layer->plane/crtc information for each
frame. The display compositors use the per-display compositions to
display the frame on their output.
Each display compositor receives a shared pointer to the frame's
DrmComposition on QueueComposition. As a result, both the composition,
and the per-display compositions, live for as long as any one
display is still using it. While this is sub-optimal (since a display
might never update again), this is probably fine for now.
Finally, splitting things up per-display will allow us to inject
non-compositing jobs into the composite queue. An example would be
turning the display off, or setting the mode. This ensures that all
frames in the composite queue are displayed before the mode changes
or the display is disabled.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I8a233ea64710b238f70acbcde1f6d771e297b069
Zach Reizner [Wed, 8 Jul 2015 23:45:04 +0000 (23:45 +0000)]
Merge "drm_hwcomposer: Add glworker" into mnc-dev
Zach Reizner [Sat, 27 Jun 2015 01:25:38 +0000 (18:25 -0700)]
drm_hwcomposer: Add glworker
The glworker allows signalling the fence synchronously once the GL
work is done. It also helps performance by putting all GL in a
separate thread, which avoids (costly on some GPUs) makecurrent.
Change-Id: Ia4ee137df5c9a4b1afcf6180407371d6ba7f699a
Sean Paul [Wed, 8 Jul 2015 14:43:54 +0000 (10:43 -0400)]
drm_hwcomposer: Add blob property type
The blob property type doesn't use the values_ vector, instead
just storing the blob id directly in value_.
Change-Id: Ibde7c64cb7fe515ece9e9f396866de2da518707f
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Stéphane Marchesin [Tue, 23 Jun 2015 23:18:10 +0000 (16:18 -0700)]
drm_hwcomposer: Add tracing for the main functions
This will help the profiling efforts, now that all the low-hanging
fruit is gone.
BUG=none
TEST=run systrace, see tracing
Change-Id: I9a149afdea8b84837c19f8e224ce8a7e2db1dd9a
Stéphane Marchesin [Fri, 19 Jun 2015 21:50:45 +0000 (14:50 -0700)]
drm_hwcomposer: Switch to triple buffering
This increases the performance of the UI (30->40 fps).
BUG=none
TEST=boot to UI, swipe between desktops, measure fps
Change-Id: Ie0ff4b51c3db402a40c9676d3f09d48d85097bce
Sean Paul [Wed, 3 Jun 2015 18:08:27 +0000 (14:08 -0400)]
drm_hwcomposer: Use atomic modeset to set crtc timing
Use the new drm blob ioctl and atomic modeset properties to
do atomic modesetting, as opposed to the old setCrtc call.
This allows us to set timing as soon as the system layer requests
a new active config, as opposed to delaying it until we have
an fb. Aside from reducing complexity, this should help with
event control requests as we'll be able to service them with
hw vblanks instead of synthesized sleeps.
Change-Id: I9c80d44f52f52881a3a25b2ae518973d468bc110
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Zach Reizner [Fri, 12 Jun 2015 00:19:48 +0000 (00:19 +0000)]
Merge "drm_hwcomposer: integrate GLCompositor with hwcomposer" into mnc-dev
Zach Reizner [Wed, 10 Jun 2015 23:03:01 +0000 (16:03 -0700)]
drm_hwcomposer: integrate GLCompositor with hwcomposer
This patch makes it such that HWC will always composite all layers even if
there are too few HW planes. Any layers that do not fit in a plane get
rendered into a screen sized buffer by GLCompositor, the result of which uses
up one of the available HW planes.
Change-Id: Ibd560ae4c536632ac32d965152ceacd92bbba39f
Zach Reizner [Thu, 11 Jun 2015 20:07:09 +0000 (20:07 +0000)]
Merge "drm_hwcomposer: correct alpha channel output on gl framebuffers" into mnc-dev
Sean Paul [Thu, 11 Jun 2015 19:22:04 +0000 (19:22 +0000)]
Merge "drm_hwcomposer: Use HW overlay planes" into mnc-dev
Zach Reizner [Thu, 11 Jun 2015 18:58:52 +0000 (18:58 +0000)]
Merge "drm_hwcomposer: make GLCompositor delete bo with Importer" into mnc-dev
Zach Reizner [Thu, 11 Jun 2015 18:58:41 +0000 (18:58 +0000)]
Merge "drm_hwcomposer: fix misc style issues in gl_compositor.cpp" into mnc-dev
Zach Reizner [Thu, 11 Jun 2015 18:30:20 +0000 (11:30 -0700)]
drm_hwcomposer: correct alpha channel output on gl framebuffers
Change-Id: I1ca8f2f7edb7fbb8691c4ba37c859bf60dcea77a
Zach Reizner [Thu, 11 Jun 2015 18:28:48 +0000 (11:28 -0700)]
drm_hwcomposer: make GLCompositor delete bo with Importer
Change-Id: I4ec6111372381701c238d5333aa1c56baf301e02
Zach Reizner [Thu, 11 Jun 2015 18:40:18 +0000 (11:40 -0700)]
drm_hwcomposer: fix misc style issues in gl_compositor.cpp
Change-Id: I9b3adf7979ff86eb1b89de03f3d8fe8bd1e35dc4
Sean Paul [Thu, 11 Jun 2015 14:01:23 +0000 (14:01 +0000)]
Merge "drm_hwcomposer: Reference count NvImporter buffers" into mnc-dev
Sean Paul [Thu, 11 Jun 2015 13:42:11 +0000 (13:42 +0000)]
Merge "drm_hwcomposer: Implement Dump() for DrmCompositor" into mnc-dev
Sean Paul [Thu, 11 Jun 2015 13:42:03 +0000 (13:42 +0000)]
Merge "drm_hwcomposer: Add Dump() to the Compositor interface" into mnc-dev
Sean Paul [Wed, 10 Jun 2015 21:29:05 +0000 (17:29 -0400)]
drm_hwcomposer: Implement Dump() for DrmCompositor
Output simple fps information from the DrmCompositor on Dump().
Change-Id: Ic1f4f922fa2cd15e1fc7c6fdb412baa33611676f
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 10 Jun 2015 21:27:47 +0000 (17:27 -0400)]
drm_hwcomposer: Add Dump() to the Compositor interface
Add a Dump() function to the Compositor base class and pipe it
through hwcomposer. This can be invoked from the shell by
running "dumpsys SurfaceFlinger".
Change-Id: I87646f4e926ac6d52a04ba130957abdfab99c491
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 10 Jun 2015 18:32:51 +0000 (14:32 -0400)]
drm_hwcomposer: Use HW overlay planes
Now that buffers are sticking around while hwc wants them,
turn on use of HW overlay planes in the drm compositor.
Change-Id: I05fb0bfa54933c009168bfc7292d134e5e987542
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 10 Jun 2015 18:30:47 +0000 (14:30 -0400)]
drm_hwcomposer: Reference count NvImporter buffers
Instead of directly freeing buffers from the NvImporter
release callback, use reference counting to ensure that
we:
(a) don't free the buffer while NvGralloc is still using it
(b) don't free the buffer while HWC is still using it
Before this patch, we weren't satisifying (b). This would
cause us to free a buffer before and while it was on the
screen.
Change-Id: I6bbc541c72df4d5f12a8734de2f2e68168b73a07
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 8 Jun 2015 20:03:33 +0000 (16:03 -0400)]
drm_hwcomposer: Don't compile all importers at once
Choose based on the BoardConfig flags.
I'd like to revert this once drm_gralloc is available
in all working branches.
Change-Id: I171d8f9146bdca0f0671092b8e539031c2f64f0f
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Tue, 19 May 2015 15:10:50 +0000 (08:10 -0700)]
drm_hwcomposer: Initialize DrmProperty type_ member
Initialize it to an invalid value instead of INT.
Change-Id: I5d75b9a3696a748d6352d918263b482034a22001
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 18 May 2015 15:31:06 +0000 (08:31 -0700)]
drm_hwcomposer: Fix case on DrmCrtc mode_valid_ member variable
Change-Id: If2a431a4a18ea7908654a4a92a4a6acca8ed92d1
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 13 May 2015 13:23:09 +0000 (06:23 -0700)]
drm_hwcomposer: Move event worker into VSyncWorker
Using the new Worker interface, split out the event worker
now that it just handles vsyncs.
Change-Id: I7ebc6237b10411fdba3b8826935921b8c83c4b6c
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 13 May 2015 13:33:23 +0000 (06:33 -0700)]
drm_hwcomposer: Use hw planes + drm atomic interface
Replace the basic, single overlay, modeset/flip implementation with
a new Compositor instantiation for drm. The new compositor uses the
drm atomic interface to composite layers to multiple hardware planes.
This change also introduces an importer argument in
Compositor::CreateComposition. By specifying the importer, Compositor
instances are responsible for cleaning up buffer objects submitted
via Composition::AddLayer.
Change-Id: Ic292829cd93475d754294b00428de132301092b2
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 3 Jun 2015 19:50:21 +0000 (15:50 -0400)]
drm_hwcomposer: Add Importer to CreateComposition()
The Compositor will be responsible for releasing buffers that
are successfully added to a composition using AddLayer. To achieve
this, the Importer of the buffers must be provided to Compositor/Composition.
Change-Id: I1f0acd70c245b7a2b6c93649f247e30e7f2e9dc4
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 1 Jun 2015 18:11:52 +0000 (14:11 -0400)]
drm_hwcomposer: Wrap the importers in a class
This will allow us to move the importer functionality into the
drmcompositor.
Change-Id: I4274ebd1776c4d7879342c54a2b7c4095ebc50f4
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Tomasz Figa [Wed, 3 Jun 2015 14:46:14 +0000 (10:46 -0400)]
drm_hwcomposer: Allow importer to be specified from BoardConfig
Use BOARD_DRM_HWCOMPOSER_BUFFER_IMPORTER from BoardConfig to
determine which importer to use.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Ia081628830b78187ea1f8a3e3e4260188e130324
Zach Reizner [Wed, 1 Apr 2015 00:56:36 +0000 (17:56 -0700)]
drm_hwcomposer: add overlapping rectangle seperation algorithm
Change-Id: I40734ce77191ac37fb2a2c156d6010530df0434b
Sean Paul [Wed, 13 May 2015 13:22:10 +0000 (06:22 -0700)]
drm_hwcomposer: Add Worker class to abstract thread nasties
This will allow us to spin up threads more easily.
Change-Id: I74add3d20ab14a61f3c646877a3ee17d0bd99ac4
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 13 May 2015 13:27:37 +0000 (06:27 -0700)]
drm_hwcomposer: Set requires_modeset() to false after modeset
Reset requires_modeset on a crtc once the initial modeset is
completed. Without this, we'll just do modesets instead of flips.
Change-Id: I998914c914ccb97346ed194a993c703f387bf93b
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 7 May 2015 18:35:29 +0000 (11:35 -0700)]
drm_hwcomposer: Store displays in std::map
Instead of a fixed length array, use a std::map for
displays.
Change-Id: I77a4893f3051d6af4030e3208d096b5796796c84
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 11 May 2015 17:43:31 +0000 (10:43 -0700)]
drm_hwcomposer: Fix up #include ordering
Change-Id: I9d808389c60b9d77c8e03a09aeaf3f309353cde8
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 11 May 2015 17:34:17 +0000 (17:34 +0000)]
Merge "drm_hwcomposer: Wrap libdrm ops (minus modeset/flip) in C++ classes" into mnc-dev
Sean Paul [Thu, 30 Apr 2015 19:31:06 +0000 (15:31 -0400)]
drm_hwcomposer: Wrap libdrm ops (minus modeset/flip) in C++ classes
This allows us to compartmentalize a bunch of code/logic from
hwcomposer.cpp into drm classes.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Id3f912126f1fdcd44d32c3eb4fba646f77590278
Zach Reizner [Fri, 8 May 2015 21:32:35 +0000 (21:32 +0000)]
Merge "drm_hwcomposer: add GLES compositor" into mnc-dev
Zach Reizner [Wed, 29 Apr 2015 18:15:09 +0000 (11:15 -0700)]
drm_hwcomposer: add GLES compositor
This patch adds the GLES based compositor. This doesn't actually make
the hwcomposer use it, which will come in a later commit. This
version of the compositor uses syncpoints optimally and has no
fallback for the case where too many (32 currently) layers overlap.
(cherry picked from commit
6996227fe43bcf78c6e692e8098bdddb95bfda6e)
Change-Id: I3503cb5d1b309ae06d1ed2a8d244640ad81eda9e
Dan Albert [Fri, 8 May 2015 06:42:54 +0000 (23:42 -0700)]
Add missing include for calloc/free.
Bug: http://b/
15193147
Change-Id: Ibb2fb6fef4ca6a23eb2f53111c4b01847fe468b2
Dan Albert [Thu, 7 May 2015 19:57:27 +0000 (12:57 -0700)]
Stop using stlport.
This was dead a long time ago.
Bug: http://b/
15193147
Change-Id: I9de3ad7fb14f987d36823e6fc4a60a33c92ddf4f
(cherry picked from commit
59368c2ccea1b108a580cab11443ca9630658cb7)
Sean Paul [Wed, 29 Apr 2015 20:05:23 +0000 (16:05 -0400)]
drm_hwcomposer: Update style to conform with Google Style Guide
Change-Id: I9b1a7dbcb9b8c6b0a6eb3c6416b5e4898a5097d8
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 20 Apr 2015 19:32:40 +0000 (19:32 +0000)]
Merge "drm_hwcomposer: add a .clang-format for our style"
Sean Paul [Wed, 15 Apr 2015 13:18:25 +0000 (13:18 +0000)]
Merge "drm_hwcomposer: Gate compilation on BOARD_USES_DRM_HWCOMPOSER"
Sean Paul [Fri, 10 Apr 2015 11:45:33 +0000 (04:45 -0700)]
drm_hwcomposer: Gate compilation on BOARD_USES_DRM_HWCOMPOSER
To avoid compiling on unwanted platforms.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Iec8122d32c25ea10fc68fa78e6e051e186ff0efb
Sean Paul [Fri, 10 Apr 2015 11:45:33 +0000 (04:45 -0700)]
drm_hwcomposer: Gate compilation on BOARD_USES_DRM_HWCOMPOSER
To avoid compiling on unwanted platforms.
Change-Id: Iec8122d32c25ea10fc68fa78e6e051e186ff0efb
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Zach Reizner [Wed, 1 Apr 2015 23:01:49 +0000 (16:01 -0700)]
drm_hwcomposer: add a .clang-format for our style
Change-Id: If6059a0456376d2aba6ad09af28fbb7add33f0b4
(cherry picked from commit
fd425aec49615e749e1edc596384a3502ea0db05)
Zach Reizner [Wed, 1 Apr 2015 23:11:14 +0000 (16:11 -0700)]
drm_hwcomposer: add compositor interface header
Change-Id: I4b743e442e140f8fe5452fba3dd718995fe77b1b
(cherry picked from commit
af3c4ecc830bef9d538333d0bf200fed39ae3649)
David Riley [Fri, 27 Mar 2015 04:50:11 +0000 (21:50 -0700)]
drm_hwcomposer: Fix missing header
Signed-off-by: David Riley <davidriley@google.com>
Sean Paul [Fri, 20 Mar 2015 13:54:50 +0000 (13:54 +0000)]
Merge "drm_hwcomposer: Introduce a new event worker to handle vblanks/flips" into lmp-mr1-dragon-dev
Sean Paul [Tue, 3 Mar 2015 22:46:19 +0000 (17:46 -0500)]
drm_hwcomposer: Introduce a new event worker to handle vblanks/flips
Instead of having a dedicated vsync worker for each display, factor out
the drm fd wait from the set workers into a global event worker. This
worker will dispatch vsync() callbacks to SurfaceFlinger, as well as
unblock the appropriate set worker when flips complete.
Change-Id: I169132b2a93a2c9feabcab116aab4e61861166e1
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Zach Reizner [Wed, 11 Mar 2015 20:26:28 +0000 (13:26 -0700)]
drm_hwcomposer: fix new then free error for hwc_context_t
Change-Id: Id987b9eebe818ded689dbdfd1c695118b0a81d5e
Lauri Peltonen [Mon, 2 Mar 2015 17:10:04 +0000 (19:10 +0200)]
drm_hwcomposer: Fix header compilation for C
Change-Id: I07ff3f16f3542071b42cfaa6b294017e54a84c4a
Reviewed-on: https://chrome-internal-review.googlesource.com/203636
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Lauri Peltonen [Mon, 23 Feb 2015 18:44:16 +0000 (20:44 +0200)]
drm_hwcomposer: Cache FB and gem in gralloc buffer
Move drm fb object creation to the importer.
In NV importer, use GRALLOC_MODULE_PERFORM_SET_IMPORTER_PRIVATE
and GRALLOC_MODULE_PERFORM_GET_IMPORTER_PRIVATE to cache the hwc_drm_bo
in the gralloc buffer. This avoids the need to recreate fb objects
again each frame, and also greatly simplifies managing the lifetime of
the gem handles.
The drm_gralloc importer does not support caching at this point. In an
attempt to keep it somewhat working, add hwc_import_bo_release function
that hwc calls when it's ok to rm fb. If hwc_import_bo_release returns
true, then hwc will clean up gem handles as it did before.
We should consider doing a follow-up patch that adds fb/gem caching to
drm_gralloc importer also. Then some of the code that is kept in this
patch for backwards compatibility can be removed.
Change-Id: I92857dcaddf8cea219ebc041e16ef76087a1b696
Reviewed-on: https://chrome-internal-review.googlesource.com/200895
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Sean Paul [Sun, 22 Feb 2015 22:55:43 +0000 (17:55 -0500)]
drm_hwcomposer: Initialize timeline_next to 1
Initialize timeline_next to 1, because point 0 will be the very first
set operation. Since we increment every time set() is called,
initializing to 0 would cause an off-by-one error where
surfaceflinger would always composite on the front buffer.
Change-Id: I1e67c36864716595eb489286a7db3f1dcb04f67e
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Reviewed-on: https://chrome-internal-review.googlesource.com/200735
Tested-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Allen Martin <amartin@nvidia.com>
Reviewed-by: Sean Paul <seanpaul@google.com>
Allen Martin [Sun, 22 Feb 2015 13:18:56 +0000 (05:18 -0800)]
drm_hwcomposer: initialize timeline_next
Initialize timeline_next to 0
Change-Id: I5d9f051ac659b06be19f5e5eaaab8a665f10832c
Reviewed-on: https://chrome-internal-review.googlesource.com/200646
Reviewed-by: Sean Paul <seanpaul@google.com>
Commit-Queue: Sean Paul <seanpaul@google.com>
Tested-by: Sean Paul <seanpaul@google.com>
Allen Martin [Sun, 22 Feb 2015 12:48:14 +0000 (04:48 -0800)]
drm_hwcomposer: move AddFb/RmFb to reference gem handles
Move drmModeAddFB2 and drmModeRmFB to ensure a reference to the gem
handles are taken while the buffer is in use.
Change-Id: Ib9afdb91144850480ecaac9d73601d887af5fa12
Reviewed-on: https://chrome-internal-review.googlesource.com/200686
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Allen Martin [Sun, 22 Feb 2015 12:18:17 +0000 (04:18 -0800)]
drm_hwcomposer: Check against gem handles for popped buffer
Add check before closing gem handle for most recently popped buffer in
addition to buffers in queue.
Change-Id: Icb096bd4db439b1195a123e28468142829fc61ea
Reviewed-on: https://chrome-internal-review.googlesource.com/200725
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Allen Martin [Sun, 22 Feb 2015 05:20:17 +0000 (21:20 -0800)]
drm_hwcomposer: Do not close gem handle if queued
Fix an issue where if the same gem handle was queued twice we would
close the handle when the first one came out of the queue, leading to
a failure when calling drmModeAddFB2() on the second buffer.
Change-Id: I0bd35158215f74b51111d2e259bca3ba5125b203
Reviewed-on: https://chrome-internal-review.googlesource.com/200715
Tested-by: Allen Martin <amartin@nvidia.com>
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Lauri Peltonen [Mon, 2 Feb 2015 12:45:13 +0000 (14:45 +0200)]
drm_hwcomposer: Support Nvidia gralloc
When using an Nvidia gralloc implementation, ask Nvidia gralloc to import the
buffer_handle_t to the hwcomposer's drm device.
Arguably, the code to perform the import would more naturally belong to
drm_hwcomposer than Nvidia gralloc. But letting Nvidia gralloc do it has two
advantages. First, drm_hwcomposer doesn't need to include vendor headers or
link against vendor libraries. This means that it's easy to support both
drm_gralloc and Nvidia gralloc from the same default build of drm_hwcomposer.
Second, Nvidia gralloc will take care of properly setting up any vendor
specific metadata (such as tiling parameters) of the imported GEM handle.
Change-Id: I0f77fb301e7e0bff2a8cd7befeae4bc4892220ad
Reviewed-on: https://chrome-internal-review.googlesource.com/195115
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Lauri Peltonen [Wed, 4 Feb 2015 14:55:31 +0000 (16:55 +0200)]
drm_hwcomposer: Support other drm nodes than card0
On dragon, card0 = Nouveau, card1 = TegraDRM.
Change-Id: Ie69639e40162ceb4ab99025dd9406ae44b7204c8
Reviewed-on: https://chrome-internal-review.googlesource.com/196021
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Tested-by: Stéphane Marchesin <marcheu@google.com>
Lauri Peltonen [Thu, 12 Feb 2015 11:54:33 +0000 (13:54 +0200)]
drm_hwcomposer: Fix fence leak
Hwcomposer is responsible for closing the acquire fences passed
in during hwc_set. Make sure that it does so, even if there is
an error condition.
Change-Id: I5c9096804c2613ec317c306dd361cb5f1a2ba5b2
Signed-off-by: Lauri Peltonen <lpeltonen@nvidia.com>
Reviewed-on: https://chrome-internal-review.googlesource.com/198356
Tested-by: Stéphane Marchesin <marcheu@google.com>
Commit-Queue: Stéphane Marchesin <marcheu@google.com>
Reviewed-by: Stéphane Marchesin <marcheu@google.com>
Sean Paul [Tue, 10 Feb 2015 19:10:58 +0000 (14:10 -0500)]
drm_hwcomposer: Remove drmSetMaster call
Now that gralloc is using a render node, we can remove
this call. This allows us to run as a non-root user as
well.
Change-Id: I46c9c16c7a9a169378e567d4973172f8392d441b
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Mon, 9 Feb 2015 07:24:11 +0000 (02:24 -0500)]
drm_hwcomposer: Use prime to import gem handles
Change-Id: Id5d5f9a61f092f33130fed4d8b8d00fcaf401dea
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Thu, 5 Feb 2015 17:04:22 +0000 (09:04 -0800)]
drm_hwcomposer: Include stdlib.h in the importer
Change-Id: I3fffc5e62c07de9561b6f998700a98862ebd5fc8
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Sean Paul [Wed, 4 Feb 2015 18:34:47 +0000 (10:34 -0800)]
drm_hwcomposer: Set display config on initialization
We shouldn't wait for surfaceflinger to set active config, initialize
the display with a config. For now we just choose the first config in
the list. This should change to a more sane choice, such as the preferred
mode or something similar.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Ib063080c282cec28c9b0218c0ba5151d48b367ce
Sean Paul [Wed, 4 Feb 2015 18:19:55 +0000 (10:19 -0800)]
drm_hwcomposer: Ignore NULL display_contents
surfaceflinger will send in NULL display_contents in prepare/set,
make sure we don't blow up.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Ia5085d4bd5e5928b52d81d14d027d0a162995946
Sean Paul [Wed, 4 Feb 2015 18:08:00 +0000 (10:08 -0800)]
drm_hwcomposer: Don't try to get configs for a disconnected connector
Short circuit getting the configs for connectors which are disconnected.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Ieabbf08f4d4a6c8b03f948399113e3ad04a2d93a
Sean Paul [Wed, 4 Feb 2015 18:05:44 +0000 (10:05 -0800)]
drm_hwcomposer: Store active mode instead of config index
Since the config indices can change out from under us, store the
actual mode instead of an index. This avoids having to
reset active_config when we get a new list from the driver.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I09a1ffbdde16c44ccc8a1d2865f09a5da22c2e26
Sean Paul [Wed, 4 Feb 2015 17:29:15 +0000 (09:29 -0800)]
drm_hwcomposer: Always perform a setcrtc initially
Always do a setcrtc on the first set(), this ensures things
are set up the way we expect them to be.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I4279d4de64339e72f0e7f9b315b2b9695704c78c
Sean Paul [Mon, 26 Jan 2015 04:31:30 +0000 (23:31 -0500)]
drm_hwcomposer: Implement eventControl with vsync worker
Adds a new worker to handle events requested by eventControl.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I6d63bb43b5f112e2efb0c426e7fd59910fc98953
Sean Paul [Sat, 24 Jan 2015 06:34:31 +0000 (01:34 -0500)]
drm_hwcomposer: Implement release and retire fences using sw_sync
Once drm supports passing sync through, we'll move onto that.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I78bd5d380212b4aaec4b41dcba6cc882f1e5cc20
Sean Paul [Fri, 23 Jan 2015 06:41:13 +0000 (01:41 -0500)]
drm_hwcomposer: Reduce time spent in display_lock
This reduces the amount of time set will block on the
worker.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: If5d110ce78e98642265ffa7dcc25710bc227330b
Sean Paul [Fri, 23 Jan 2015 06:11:58 +0000 (01:11 -0500)]
drm_hwcomposer: Use queue buffer for pending sets
Instead of just using a front and back buffer, use a queue buffer
to allow more than one pending set.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I451acbcb08fac5191b76ec2e372fe612d227167c
Sean Paul [Thu, 22 Jan 2015 23:01:18 +0000 (18:01 -0500)]
drm_hwcomposer: Split gralloc out into an importer
Add the concept of an importer so we can plug in different
sources of bo.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I4f741ef4fa7c44e9cb31db61a146aed273854a69
Sean Paul [Thu, 22 Jan 2015 20:47:54 +0000 (15:47 -0500)]
drm_hwcomposer: Add a new set thread to post bo's
Adds a new set thread to wait on acquire fence, flip the bo,
and wait for it to be presented on screen.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: Ia931a7cbe287f4c744068fc80e476f81880bf608
Sean Paul [Tue, 20 Jan 2015 21:56:04 +0000 (16:56 -0500)]
drm_hwcomposer: Initial implementation
This adds a very basic hwcomposer implementation on top of
libdrm.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Change-Id: I472feb9bc08a4c4cd9849370c849d266ea58da9c