The compiler static analyzer is issuing several false positive
warnings for the file system/core/libadf/adf.cpp:
line 134: warning: Attempt to free released memory
line 240: warning: Use of memory after it is freed
line 454: warning: Use of memory after it is freed
line 553: warning: Attempt to free released memory
line 568: warning: Use of memory after it is freed
line 645: warning: Potential leak of memory pointed to by 'engs'
line 653: warning: Potential leak of memory pointed to by 'filtered_engs'
After careful analysis of the source I have come to the conclusion
that these are false warnings. This CL annotates the source so the
static analyzer won't issue these warnings any more.
Bug: None
Test: The warnings are no longer being issued.
Change-Id: I158756b3f1eeb66f346be3cd2ffe10ebde236c80
The library is used by both platform (e.g. libminui) and vendors (for
theor HW composer HAL impl).
Bug: 64050301
Test: 2017 pixel devices build
Test: libadf.so is in /system/lib[64]/vndk directory
Change-Id: I20b8b9728cdc56a7491266070740c3330d4324dc
The adf hwc event thread now responds to pthread_kill which
allows adf_hwc_close to succeed.
Test: Call "adb shell stop" and check if thread exits.
This change will allow testing of libadfhwc in future patches.
Change-Id: I66d4fc71a058db42af8d42b5d6193378a8b5d972
Add the necessary set mode support to enable HWC2's set_active_config
Test: run gtests located in frameworks/native/services/surfaceflinger/tests/hwc2
Change-Id: I686dce91a2d8fe86db13c66d22f81960c2f8e8f2
adf_getDisplayAttributes_hwc2 gets the display attributes using the updated
enums from HWC2
Test: run gtests located in frameworks/native/services/surfaceflinger/tests/hwc2
Change-Id: I31325c764ccaf65c6d970727b56327d24c7b16d8
Both humans and the clang static analyzer find libadf's error handling
confusing.
Now that the platform has better C++ support, we can clean up things up
by switching to C++ and using STL + RAII in targeted parts of the code.
This isn't a complete rewrite in idiomatic C++, but it's enough to get
rid of all the "goto" statements (and the false-positive memory leaks
found by clang's static analyzer).
Bug: 27125399
Test: WITH_STATIC_ANALYZER=1 mmm system/core/adf/libadf
Test: /data/nativetest/adf-unit-tests/adf-unit-tests (on Nexus 9)
Test: /data/nativetest64/adf-unit-tests/adf-unit-tests (on Nexus 9)
Change-Id: Ie9dd5d5dc424d1a3ddcc3cba836fce04190f46fd
Signed-off-by: Greg Hackmann <ghackmann@google.com>
If devs is uninitialized and adf_devices() fails, we'll end up passing
the uninitialized pointer to free().
Test: /data/nativetest64/adf-unit-tests/adf-unit-tests (on Nexus 9 w/o root)
Change-Id: Ifc6038c1da14d32ee564675bac54fc7df2623c1d
Signed-off-by: Greg Hackmann <ghackmann@google.com>
adf_{device,interface_simple}_post_v2 let the client choose what kind of
fence is returned from the kernel:
* ADF_COMPLETE_FENCE_NONE: no fence is returned
* ADF_COMPLETE_FENCE_PRESENT: the returned fence fires when the
specified configuration appears on the screen
* ADF_COMPLETE_FENCE_RELEASE: the returned fence fires when the
specified configuration is removed from the screen
The "V2" calls with fence type ADF_COMPLETE_FENCE_RELEASE are functionally
equivalent to "V1" calls.
Test: included gtest (on Nexus 9)
Change-Id: I36190d1b6cea0fbaed2af3ad64fa4729200c5520
Signed-off-by: Greg Hackmann <ghackmann@google.com>
ADF isn't a candidate for upstreaming and isn't (directly) usable from
unprivileged NDK code, so it makes more sense to keep video/adf.h as a
private header inside libadf, where it'll still be usable by HWC
implementations without shipping in the NDK.
libadf exports its entire include/ directory, so this shouldn't have
any impact on HWC implementations that already link against libadf.
Test: mmm system/core/adf/libadf
Test: /data/nativetest64/adf-unit-tests/adf-unit-tests (on Nexus 9)
Change-Id: I14532d59005196e002f7465474ac3c7cc9e59bd3
Signed-off-by: Greg Hackmann <ghackmann@google.com>
kati needs us to add "tests" as a subdir of the libadf Android.bp.
clang also requires an explicit definition of AdfTest::dev_id where
g++ does not.
Test: mmm system/core/adf/libadf
Test: /data/nativetest64/adf-unit-tests/adf-unit-tests (on Nexus 9)
Change-Id: I1fc371af1b5b115f088edd963a87e6647a52882b
Signed-off-by: Greg Hackmann <ghackmann@google.com>
Should use android/log.h instead of cutils/log.h as a good example
to all others. Adjust header order to comply with Android Coding
standards.
Test: Compile
Bug: 26552300
Bug: 31289077
Change-Id: I2c9cbbbd64d8dccf2d44356361d9742e4a9b9031
Strings like cflags in Android.bp files are parsed by blueprint,
written to build.ninja files, parsed by ninja, and then passed to
/bin/sh -c. This had resulted in a combination of blueprint
(\"), ninja ($$), and shell (\$) escaping being necessary.
Soong has been updated to automatically handle ninja and shell
escaping, remove extra escaping from Android.bp files.
Bug: 31221587
Test: m -j
Change-Id: I78003c7a18028d27dff444af7d84901345d323a1
Some versions of gcc warn that intfs may be used uninitialized
Change-Id: I3b8d7e919e9c2902ac56adeabd09a45ececfb3c4
Signed-off-by: Greg Hackmann <ghackmann@google.com>
Helper library for implementing a hwcomposer HAL on top of libadf
Change-Id: I2af0617416fb4a6b3a1d182a22e809bfdc54a532
Signed-off-by: Greg Hackmann <ghackmann@google.com>