aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-02-01Merge "Snap for 9551305 from 39e9dc65f3a608c85124d4014b07ede70680f18b to ↵aml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz5_341510010Android Build Coastguard Worker
mainline-tzdata5-release" into mainline-tzdata5-release
2023-02-01Snap for 9551305 from 39e9dc65f3a608c85124d4014b07ede70680f18b to ↵Android Build Coastguard Worker
mainline-tzdata5-release Change-Id: Ia10bf9122b800a713ba73875b6db646bb7d61e5b
2023-02-01Snap for 9550733 from 39e9dc65f3a608c85124d4014b07ede70680f18b to ↵Android Build Coastguard Worker
mainline-tzdata5-release Change-Id: Ib1d5887794efa0f59e55056d33ea9d555d41c9e9
2022-10-11Merge "Allow clang-tidy warnings." am: a9aff13009 am: 047541543a am: dd74ccbf17android-14.0.0_r45android-14.0.0_r44android-14.0.0_r43android-14.0.0_r42android-14.0.0_r41android-14.0.0_r40android-14.0.0_r39android-14.0.0_r38android-14.0.0_r27android-14.0.0_r26android-14.0.0_r25android-14.0.0_r24android-14.0.0_r23android-14.0.0_r22android-14.0.0_r21android-14.0.0_r20android-14.0.0_r19android-14.0.0_r18android-14.0.0_r17android-14.0.0_r16aml_rkp_341510000aml_rkp_341311000aml_rkp_341114000aml_rkp_341015010aml_rkp_341012000aml_hef_341717050aml_hef_341613000aml_hef_341512030aml_hef_341415040aml_hef_341311010aml_hef_341114030aml_cfg_341510000android14-qpr1-s2-releaseandroid14-qpr1-releaseandroid14-mainline-healthfitness-releaseandroid14-devandroid14-d2-s5-releaseandroid14-d2-s4-releaseandroid14-d2-s3-releaseandroid14-d2-s2-releaseandroid14-d2-s1-releaseandroid14-d2-releaseAlistair Delva
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2247694 Change-Id: I5b2714e1962e441dabcd7ee396d28a5ebde85730 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-11Merge "Allow clang-tidy warnings." am: a9aff13009 am: 047541543aandroid-u-beta-1-gplAlistair Delva
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2247694 Change-Id: I89d87ebb9337b91f0a84380811d94a43cc662bff Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-11Merge "Allow clang-tidy warnings." am: a9aff13009main-16k-with-phonesAlistair Delva
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2247694 Change-Id: I44448d49e48d75ba162f9c375e5fc55a790b575b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-11Merge "Allow clang-tidy warnings."Alistair Delva
2022-10-10Allow clang-tidy warnings.Chih-Hung Hsieh
Upstream source still have some clang-tidy warnings. We do not want to stop Android builds on clang-tidy warnings. Bug: 252877310 Test: TIDY_EXTERNAL_VENDOR=1 make tidy-external_subset Change-Id: Ibb076b7c9dbb3c935a9b108681a9ab459bff42ef
2022-10-06drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: a393df4bcf am: ↵Amit Pundir
cdc4ed6c83 am: a3553966d4 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2238060 Change-Id: I4cfe66e37159f47fb2e6850f8b96d8a925934f2c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-06drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: a393df4bcf am: ↵Amit Pundir
cdc4ed6c83 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2238060 Change-Id: Ia04a958d5b828e86080125b8d378bf618e71be5d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-06drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: a393df4bcfAmit Pundir
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2238060 Change-Id: Ibfb3376003cc553d7074de65f00d41f5fb3d2fe4 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-10-06drm_hwcomposer: Merge 'aosp/upstream-main' into HEADAmit Pundir
Sync with upstream * aosp/upstream-main: drm_hwcomposer: Basic support for shared primary planes drm_hwcomposer: check if the primary plane is being used by any crtc drm_hwcomposer: fix BufferInfoImagination build Change-Id: Id558c88c0f3b64e8c8bd33cb8d20f778ba610d85 Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
2022-09-29drm_hwcomposer: Basic support for shared primary planesRoman Stratiienko
For now just bind the first suitable primary plane to the pipeline on creation. Closes: https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer/-/issues/68 Change-Id: Idc4a7a5ac9d768d2614e1cd8a460d742f406a1cc Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
2022-09-09drm_hwcomposer: check if the primary plane is being used by any crtcYongqin Liu
Some DRM driver such as omap_drm allow sharing primary plane between CRTCs. drm_hwcomposer isn't ready for such a scenarios and fails with an error: Found more than 1 primary plane for CRTC Don't report multiple primary planes for single CRTC to satisfy the drm_hwc. Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
2022-08-25drm_hwcomposer: fix BufferInfoImagination buildAndrii Chepurnyi
Commit e9fbd8d626a2 ("drm_hwcomposer: Set return type to std::optional for BufferInfoGetters") changed the BufferInfo variable name, but missed the case defined under HAL_PIXEL_FORMAT_BGRX_8888. This results in build failures. This patch fixes the build issue by completing the variable renaming. Fixes: e9fbd8d626a2 ("drm_hwcomposer: Set return type to std::optional for BufferInfoGetters") Signed-off-by: Andrii Chepurnyi <andrii_chepurnyi@epam.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: cd31422280 am: ↵John Stultz
5944fd14ed am: 9a34e46f1b am: 48181a034b am: c98eee1cd4 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143433 Change-Id: I0af938325727d7221e08fdc26455e41920d6f4ad Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: cd31422280 am: ↵John Stultz
5944fd14ed am: 9a34e46f1b am: 48181a034b Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143433 Change-Id: Ia416801b136cd54da6beffbf5292843cb688436c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: cd31422280 am: ↵John Stultz
5944fd14ed am: 9a34e46f1b Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143433 Change-Id: I9246d1971f422a42e4695ec5b8d54a78c38cc5a2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: cd31422280 am: ↵John Stultz
5944fd14ed Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143433 Change-Id: I34cd18905dd2916b8894c90fff312b439f4c478a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEAD am: cd31422280John Stultz
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143433 Change-Id: I2861712124a6e8cfa91eeb7103fa8569607d05d2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-08drm_hwcomposer: Merge 'aosp/upstream-main' into HEADJohn Stultz
Sync with upstream * aosp/upstream-main: drm_hwcomposer: Fix BufferInfoMaliMeson drm_hwcomposer: Workaround for screen de-activating causing db845c regression drm_hwcomposer: Split the composition cleanup and display's deactivation drm_hwcomposer: Fix EINTR handling in clock_nanosleep drm_hwcomposer: Don't try to import client layer in headless mode drm_hwcomposer: Implement BI and FB caching drm_hwcomposer: Add unique handle ID getter into buffergetter class drm_hwcomposer: Reorganize struct DrmHwcLayer drm_hwcomposer: Set return type to std::optional for BufferInfoGetters drm_hwcomposer: Move include/drmhwcgralloc.h to bufferinfo/BufferInfo.h drm_hwcomposer: Use atrace for framebuffer's import/remove events drm_hwcomposer: Add non-blocking commit support drm_hwcomposer: Fix HwcLayer::GetReleaseFences() drm_hwcomposer: Allow accessing ResourceManager from DrmDevce drm_hwcomposer: CI: Bump clang toolchain version to v14 drm_hwcomposer: Fix HwcDisplay::GetDisplayIdentificationData() drm_hwcomposer: Fix SetPowerMode() VTS tests for headless mode drm_hwcomposer: Fixes for display hotplug / headless mode Signed-off-by: John Stultz <jstultz@google.com> Change-Id: I629e0274bb5ce7371d0437aff985fa76e69510ba
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddress am: 47875fade6 ↵John Stultz
am: 080c9b2aab am: 6ac06cd307 am: 4b2e3cfc85 am: 59dae02a5d Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143434 Change-Id: Ieac101c2c9948d2677090a289bd789455330828c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddress am: 47875fade6 ↵John Stultz
am: 080c9b2aab am: 6ac06cd307 am: 4b2e3cfc85 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143434 Change-Id: I8370ffd7ea26ddb8e52ffe806f9d224bfaa3744d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddress am: 47875fade6 ↵John Stultz
am: 080c9b2aab am: 6ac06cd307 Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143434 Change-Id: I437e6ebf92ed3fb9dfa40e1f6ab42bc81a380f8f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddress am: 47875fade6 ↵John Stultz
am: 080c9b2aab Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143434 Change-Id: I2d2cbb8fcf9149ebae4528ff9595c4fbceaba9bf Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddress am: 47875fade6John Stultz
Original change: https://android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/2143434 Change-Id: I1d6438901e4382d397d3e8ea27a3e50cf03ddef2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-07-07drm_hwcomposer: Fix BufferInfoMaliMesonJohn Stultz
In commit e9fbd8d626a2 ("drm_hwcomposer: Set return type to std::optional for BufferInfoGetters") the final return for BufferInfoMaliMeson::GetBoInfo() erroneously was changed to return {} instead of the calculated BufferInfo object. This simply fixes the issue, returning the BufferInfo. Change-Id: I03789b48dc4a0df64432f7ff31661746163a96b8 Signed-off-by: John Stultz <jstultz@google.com>
2022-07-07drm_hwcomposer: OWNERS: Update John Stultz' email adddressJohn Stultz
Update my email address Signed-off-by: John Stultz <jstultz@google.com> Change-Id: I5378ce40c2f96cf5bca252592ebc2b722ffd2edf
2022-06-30drm_hwcomposer: Workaround for screen de-activating causing db845c regressionJohn Stultz
Since commit d0494d9b8097 ("drm_hwcomposer: Fixes for display hotplug / headless mode"), which introduced an extra call to de-active the display on de-init, we've seen regressions on db845c with the VtsHalGraphicsComposerV2_3TargetTest test set. This seems to be due to an issue on db845c, where after putting the lt9611 bridge to sleep, the connection detection stops working even after the chip is reset. However, on changing the kernel driver to avoid putting the bridge to sleep so connect detection works, we start to see SIGSEGV crashes in drm_hwcomposer, due to the service expecting the hwmodule to finish registercallback during client detaching within 1 second. Exceeding this values causes VTS to crash. And msm driver introduces delay enough to exceed the limit. So this patch is a workaround to restore previous behavior to avoid the regression until we can sort out a proper fixes to db845c and drm_hwcomposer. Signed-off-by: John Stultz <jstultz@google.com> Change-Id: Iff5d3cf3f7fa2f1f2acb68a5a629677137e51188
2022-06-30drm_hwcomposer: Split the composition cleanup and display's deactivationRoman Stratiienko
When drm_hwcomposer is used with drm/sun4i driver, 'adb shell stop && adb shell start' sequence causes noise on the unused planes during the bootanimation. It looks like some bug in the drivers or DRM frontend itself, which keeps the plane assigned to the CRTC if the atomic commit contains CRTC deactivation. We need more time to investigate it. For now we can split disposal into 2 atomic commits, which fixes the noise issue. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-06-30[automerger skipped] Merge tm-dev-plus-aosp-without-vendor@8763363 am: ↵Xin Li
027140997d -s ours am: c6bdf92184 -s ours am: 98bbab7f44 -s ours am: f6653afa4b -s ours am skip reason: Merged-In Ie962b5ff821f166d79323474bc6fad66d930e8fa with SHA-1 0ce3610105 is already in history Original change: https://googleplex-android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/19092901 Change-Id: I2bbca81d426ef968a3688854c8ae8e23e2e63d6f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-30[automerger skipped] Merge tm-dev-plus-aosp-without-vendor@8763363 am: ↵Xin Li
027140997d -s ours am: c6bdf92184 -s ours am: 98bbab7f44 -s ours am skip reason: Merged-In Ie962b5ff821f166d79323474bc6fad66d930e8fa with SHA-1 0ce3610105 is already in history Original change: https://googleplex-android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/19092901 Change-Id: I4c3a9c2afb2534d2d9d984d56694b8293c01b7c8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-29[automerger skipped] Merge tm-dev-plus-aosp-without-vendor@8763363 am: ↵Xin Li
027140997d -s ours am: c6bdf92184 -s ours am skip reason: Merged-In Ie962b5ff821f166d79323474bc6fad66d930e8fa with SHA-1 0ce3610105 is already in history Original change: https://googleplex-android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/19092901 Change-Id: I1325b3ab5db810efe347d066bb4e2c850d179389 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-29[automerger skipped] Merge tm-dev-plus-aosp-without-vendor@8763363 am: ↵Xin Li
027140997d -s ours am skip reason: Merged-In Ie962b5ff821f166d79323474bc6fad66d930e8fa with SHA-1 0ce3610105 is already in history Original change: https://googleplex-android-review.googlesource.com/c/platform/external/drm_hwcomposer/+/19092901 Change-Id: Ie973d284da2b237e43207ec57d2f34f1dee199cc Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-28Merge tm-dev-plus-aosp-without-vendor@8763363Xin Li
Bug: 236760014 Merged-In: Ie962b5ff821f166d79323474bc6fad66d930e8fa Change-Id: If6a2b297523fde8d1556ccbca7f854a0398509d3
2022-06-22drm_hwcomposer: Fix EINTR handling in clock_nanosleepKeith Mok
clock_nanosleep return errno directly instead of -1 with errno set Signed-off-by: Keith Mok <keithmok@google.com> [jstultz: Fixed minor style issues] Signed-off-by: John Stultz <jstultz@google.com> Change-Id: I779f2a8234b3dae46d64efee2210b7a2c5a92043
2022-05-30drm_hwcomposer: Don't try to import client layer in headless modeRoman Stratiienko
Pipeline is null in the headless mode, therefore any attempt to import the buffer causes a null-pointer dereference crash. Fixes: 4b2cc484f9af ("drm_hwcomposer: Reorganize struct DrmHwcLayer") Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Implement BI and FB cachingRoman Stratiienko
This allows saving for about 2-6% of frame time spending in the HWC API thread (value depends on CPU maturity). Framework does not create a new buffer for every frame. Instead in 98% of cases it sends the same buffers over and over (doing circular shifting of the swapchain). We can avoid redundant BufferInfo getting and FrameBuffer importing for the whole layer. To do this properly first we have to ensure we're having a deal with the swapchain, not a set of unique buffers. This procedure internally called the swap chain reassembling. After we ensure CLIENT is using swapchain, we can safely store BI and FB for every chain element and reuse it. Example for single layer: Frame # | Buffer Unique ID | State -- | -- | -- 1 | 301 | Reassembling... 2 | 302 | Reassembling... 3 | 303 | Reassembling... 4 | 301 | Caching... (Chain reassembled!) 5 | 302 | Caching... 6 | 303 | Caching... 7 | 301 | Reusing cached data 8 | 302 | Reusing cached data 9 | 303 | Reusing cached data ... | ... | ................... 999 | 304 | Not in cache, purge the cache. 1000 | 305 | Reassembling... Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Add unique handle ID getter into buffergetter classRoman Stratiienko
dmabuf stats inode field can be used as unique buffer id. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Reorganize struct DrmHwcLayerRoman Stratiienko
1. Move BlendMode, ColorSpace, SampleRange fields to the struct BufferInfo, allowing extraction of the data from native_handle using Metadata@4 API. Use it when data from HWC2 API can't be used (Currently it's a BlendMode case for CLIENT layer) 2. Rename DrmHwcLayer to LayerData and move it to compositor/ directory. (I was confused in the past because of similarity of names DrmHwcLayer vs HwcLayer, so this step should meke it easier for newcomers to understand the code) 3. Allow clonning of the LayerData to propagate it through the composition pipeline. Thus LayerData can be used by both HwcLayer to track state and by the compositor. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Set return type to std::optional for BufferInfoGettersRoman Stratiienko
This is a bit of code modernization. Further changes will require indication that buffer_info is valid, and using std::optional is the most correct approach to do that. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Move include/drmhwcgralloc.h to bufferinfo/BufferInfo.hRoman Stratiienko
... to emphasize its purpose. - Rename struct HwcDrmBo -> struct BufferInfo - Remove unused BufferInfo::acquire_fence, BufferInfo::hal_format and BufferInfo::usage fields Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-17drm_hwcomposer: Use atrace for framebuffer's import/remove eventsRoman Stratiienko
This metrics are useful to check time the FB cache saves for HWC. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-10drm_hwcomposer: Add non-blocking commit supportRoman Stratiienko
This change fixes FPS drop on multidisplay devices. Also in some cases it gives graphics pipeline more free time to draw in advance. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-10drm_hwcomposer: Fix HwcLayer::GetReleaseFences()Roman Stratiienko
GetReleaseFences() should return release fence for the prior buffer (not for the one assigned to layer at the moment of GetReleaseFences call). Once not provided, old front buffer can be damaged before new buffer presented. (Such issues start to appear once we started using non-blocking DRM/KMS commits). Using present (out) fence is a perfect solution, since it is signaled once old buffer replaced with the new one. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-09drm_hwcomposer: Allow accessing ResourceManager from DrmDevceRoman Stratiienko
This is useful for accessing the main lock from drm / compositor related code blocks. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-09drm_hwcomposer: CI: Bump clang toolchain version to v14Roman Stratiienko
Additionally: 1. Fix new clang-tidy findings 2. Disable readability-identifier-length check for all tidy levels Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-05-09drm_hwcomposer: Fix HwcDisplay::GetDisplayIdentificationData()Roman Stratiienko
Return Error::Unsupported in headless mode and if no EDID blob returned by the kernel. With this change GraphicsComposerHidlTest#GetDisplayIdentificationData VTS no longer fails. Also fix outPort assignment to avoid setting negative values (handle_ is 0 for primary display). Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-04-16drm_hwcomposer: Fix SetPowerMode() VTS tests for headless modeRoman Stratiienko
Test: atest VtsHalGraphicsComposerV2_1TargetTest Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
2022-03-28drm_hwcomposer: Fixes for display hotplug / headless modeRoman Stratiienko
Further testing showed that several issues is still present: 1. Boot without display doesn't work. 2. Unplug/plug primary display has some flaws due to incomplete HwcDisplay disposal. 3. In case creation of the pipeline fails, hwcomposer crashes. This commit aims to address them. Fixes: bb594baa1c68 ("drm_hwcomposer: Rework HwcDisplay disposal to avoid races") Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>