0

Android NDK: Migrate DEPS to NDK r27

https://github.com/android/ndk/releases/tag/r27

* Fixes sign-compare with new ADataSpace backing type. Replaces previous
  uint64_t with the actual ADataSpace enum.
* Fixes unittest to ignore nullptr when compiling, as we're explicitly
  trying to test the SEGV behavior when that occurs.

Bug: 353699308
Change-Id: I0f6672567354820980320719ccf6c3bd3aab36ee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5718979
Reviewed-by: Nico Weber <thakis@chromium.org>
Reviewed-by: Alex Gough <ajgo@chromium.org>
Commit-Queue: Prashanth Swaminathan <prashanthsw@google.com>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Bo Liu <boliu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1333126}
This commit is contained in:
Prashanth Swaminathan
2024-07-25 18:47:10 +00:00
committed by Chromium LUCI CQ
parent 6e437cee2e
commit 51bfd7aa11
7 changed files with 50 additions and 71 deletions

2
DEPS

@ -1419,7 +1419,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_toolchain/android_toolchain',
'version': 'h9HeidXTeHQ-oskldbqCZx26-7VrVvXpLfqOI87uy4QC',
'version': 'Idl-vYnWGnM8K3XJhM3h6zjYVDXlnljVz3FE00V9IM8C',
},
],
'condition': 'checkout_android_native_support',

@ -134,7 +134,7 @@ if (is_android || is_chromeos) {
# Today (2023-08-30) only the canary Android NDK supports RISC-V64.
default_android_ndk_root = "//third_party/android_toolchain_canary/ndk"
}
default_android_ndk_version = "r26b"
default_android_ndk_version = "r27"
} else {
assert(defined(default_android_ndk_version))
}

@ -108,7 +108,10 @@ BPF_DEATH_TEST_C(
GetSockoptPrintsCorrectMessage,
DEATH_SEGV_MESSAGE(sandbox::GetSockoptErrorMessageContentForTests()),
DisallowSockoptPolicy) {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wnonnull"
getsockopt(0, 0, 0, nullptr, nullptr);
#pragma GCC diagnostic pop
}
const char kSigsysMessage[] =

@ -1,6 +1,6 @@
Name: Android NDK
URL: http://developer.android.com/ndk/index.html
Version: r26b
Version: r27
Security Critical: no
Shipped: yes
License: Apache Version 2.0

@ -100,7 +100,7 @@ using pASurfaceTransaction_setDamageRegion =
using pASurfaceTransaction_setBufferDataSpace =
void (*)(ASurfaceTransaction* transaction,
ASurfaceControl* surface,
uint64_t data_space);
ADataSpace data_space);
using pASurfaceTransaction_setHdrMetadata_cta861_3 =
void (*)(ASurfaceTransaction* transaction,
ASurfaceControl* surface,
@ -359,48 +359,33 @@ int32_t OverlayTransformToWindowTransform(gfx::OverlayTransform transform) {
return ANATIVEWINDOW_TRANSFORM_IDENTITY;
}
// Remove this and use ADataSpace when SDK will roll. Note, this doesn't define
// any new data spaces, just defines a primary(standard)/transfer/range
// separately.
enum DataSpace : uint64_t {
// Primaries
STANDARD_BT709 = 1 << 16,
STANDARD_BT601_625 = 2 << 16,
STANDARD_BT601_525 = 4 << 16,
STANDARD_BT2020 = 6 << 16,
STANDARD_DCI_P3 = 10 << 16,
// Transfer functions
TRANSFER_LINEAR = 1 << 22,
TRANSFER_SRGB = 2 << 22,
TRANSFER_SMPTE_170M = 3 << 22,
TRANSFER_ST2084 = 7 << 22,
TRANSFER_HLG = 8 << 22,
// Ranges;
RANGE_FULL = 1 << 27,
RANGE_LIMITED = 2 << 27,
RANGE_EXTENDED = 3 << 27,
RANGE_MASK = 7 << 27,
inline ADataSpace operator|(ADataSpace a, ADataSpace b) {
return static_cast<ADataSpace>(static_cast<int32_t>(a) |
static_cast<int32_t>(b));
}
ADATASPACE_DCI_P3 = 155844608
};
inline ADataSpace& operator|=(ADataSpace& a, ADataSpace b) {
return a = static_cast<ADataSpace>(static_cast<int32_t>(a) |
static_cast<int32_t>(b));
}
bool SetDataSpaceStandard(const gfx::ColorSpace& color_space,
uint64_t& dataspace) {
ADataSpace& dataspace) {
switch (color_space.GetPrimaryID()) {
case gfx::ColorSpace::PrimaryID::BT709:
dataspace |= DataSpace::STANDARD_BT709;
dataspace |= STANDARD_BT709;
return true;
case gfx::ColorSpace::PrimaryID::BT470BG:
dataspace |= DataSpace::STANDARD_BT601_625;
dataspace |= STANDARD_BT601_625;
return true;
case gfx::ColorSpace::PrimaryID::SMPTE170M:
dataspace |= DataSpace::STANDARD_BT601_525;
dataspace |= STANDARD_BT601_525;
return true;
case gfx::ColorSpace::PrimaryID::BT2020:
dataspace |= DataSpace::STANDARD_BT2020;
dataspace |= STANDARD_BT2020;
return true;
case gfx::ColorSpace::PrimaryID::P3:
dataspace |= DataSpace::STANDARD_DCI_P3;
dataspace |= STANDARD_DCI_P3;
return true;
default:
return false;
@ -408,29 +393,29 @@ bool SetDataSpaceStandard(const gfx::ColorSpace& color_space,
}
bool SetDataSpaceTransfer(const gfx::ColorSpace& color_space,
uint64_t& dataspace,
ADataSpace& dataspace,
float& extended_range_brightness_ratio) {
extended_range_brightness_ratio = 1.f;
switch (color_space.GetTransferID()) {
case gfx::ColorSpace::TransferID::SMPTE170M:
dataspace |= DataSpace::TRANSFER_SMPTE_170M;
dataspace |= TRANSFER_SMPTE_170M;
return true;
case gfx::ColorSpace::TransferID::LINEAR_HDR:
dataspace |= DataSpace::TRANSFER_LINEAR;
dataspace |= TRANSFER_LINEAR;
return true;
case gfx::ColorSpace::TransferID::PQ:
dataspace |= DataSpace::TRANSFER_ST2084;
dataspace |= TRANSFER_ST2084;
return true;
case gfx::ColorSpace::TransferID::HLG:
dataspace |= DataSpace::TRANSFER_HLG;
dataspace |= TRANSFER_HLG;
return true;
case gfx::ColorSpace::TransferID::SRGB:
dataspace |= DataSpace::TRANSFER_SRGB;
dataspace |= TRANSFER_SRGB;
return true;
case gfx::ColorSpace::TransferID::BT709:
// We use SRGB for BT709. See |ColorSpace::GetTransferFunction()| for
// details.
dataspace |= DataSpace::TRANSFER_SRGB;
dataspace |= TRANSFER_SRGB;
return true;
default: {
skcms_TransferFunction trfn;
@ -438,12 +423,12 @@ bool SetDataSpaceTransfer(const gfx::ColorSpace& color_space,
if (color_space.GetTransferFunction(&trfn)) {
if (skia::IsScaledTransferFunction(SkNamedTransferFnExt::kSRGB, trfn,
&extended_range_brightness_ratio)) {
dataspace |= DataSpace::TRANSFER_SRGB;
dataspace |= TRANSFER_SRGB;
return true;
}
if (skia::IsScaledTransferFunction(SkNamedTransferFn::kLinear, trfn,
&extended_range_brightness_ratio)) {
dataspace |= DataSpace::TRANSFER_LINEAR;
dataspace |= TRANSFER_LINEAR;
return true;
}
}
@ -455,18 +440,18 @@ bool SetDataSpaceTransfer(const gfx::ColorSpace& color_space,
bool SetDataSpaceRange(const gfx::ColorSpace& color_space,
float extended_range_brightness_ratio,
float desired_brightness_ratio,
uint64_t& dataspace) {
ADataSpace& dataspace) {
switch (color_space.GetRangeID()) {
case gfx::ColorSpace::RangeID::FULL:
if (extended_range_brightness_ratio > 1.f ||
desired_brightness_ratio > 1.f) {
dataspace |= DataSpace::RANGE_EXTENDED;
dataspace |= RANGE_EXTENDED;
} else {
dataspace |= DataSpace::RANGE_FULL;
dataspace |= RANGE_FULL;
}
return true;
case gfx::ColorSpace::RangeID::LIMITED:
dataspace |= DataSpace::RANGE_LIMITED;
dataspace |= RANGE_LIMITED;
return true;
default:
return false;
@ -572,7 +557,7 @@ bool SurfaceControl::IsSupported() {
bool SurfaceControl::SupportsColorSpace(const gfx::ColorSpace& color_space) {
float desired_brightness_ratio = 1.f;
uint64_t dataspace = ADATASPACE_UNKNOWN;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 1.f;
return ColorSpaceToADataSpace(color_space, desired_brightness_ratio,
dataspace, extended_range_brightness_ratio);
@ -581,7 +566,7 @@ bool SurfaceControl::SupportsColorSpace(const gfx::ColorSpace& color_space) {
bool SurfaceControl::ColorSpaceToADataSpace(
const gfx::ColorSpace& color_space,
float desired_brightness_ratio,
uint64_t& out_dataspace,
ADataSpace& out_dataspace,
float& out_extended_range_brightness_ratio) {
out_dataspace = ADATASPACE_UNKNOWN;
out_extended_range_brightness_ratio = 1.f;
@ -594,12 +579,11 @@ bool SurfaceControl::ColorSpaceToADataSpace(
if (base::android::BuildInfo::GetInstance()->sdk_int() >=
base::android::SDK_VERSION_S) {
if (color_space == gfx::ColorSpace::CreateExtendedSRGB()) {
out_dataspace = DataSpace::STANDARD_BT709 | DataSpace::TRANSFER_SRGB |
DataSpace::RANGE_EXTENDED;
out_dataspace = STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED;
return true;
}
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 1.f;
if (!SetDataSpaceStandard(color_space, dataspace)) {
return false;
@ -875,7 +859,7 @@ void SurfaceControl::Transaction::SetColorSpace(
const gfx::ColorSpace& color_space,
const std::optional<HDRMetadata>& metadata) {
// Populate the data space and brightness ratios.
uint64_t data_space = ADATASPACE_UNKNOWN;
ADataSpace data_space = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 1.f;
float desired_brightness_ratio = 1.f;
if (metadata && metadata->extended_range &&
@ -896,8 +880,7 @@ void SurfaceControl::Transaction::SetColorSpace(
SurfaceControlMethods::Get().ASurfaceTransaction_setBufferDataSpaceFn(
transaction_, surface.surface(), data_space);
const bool extended_range =
(data_space & DataSpace::RANGE_MASK) == DataSpace::RANGE_EXTENDED;
const bool extended_range = (data_space & RANGE_MASK) == RANGE_EXTENDED;
// Set the HDR metadata for not extended SRGB case.
if (metadata && !extended_range) {

@ -47,7 +47,7 @@ class GFX_EXPORT SurfaceControl {
static bool ColorSpaceToADataSpace(
const gfx::ColorSpace& color_space,
float desired_brightness_ratio,
uint64_t& out_dataspace,
ADataSpace& out_dataspace,
float& out_extended_range_brightness_ratio);
// Returns the usage flags required for using an AHardwareBuffer with the

@ -168,7 +168,7 @@ TEST_F(SurfaceControlTransactionTest, CallbackSetupAfterGetTransaction) {
TEST(SurfaceControl, ColorSpaceToADataSpace) {
// Invalid color spaces are mapped to sRGB.
{
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
gfx::ColorSpace(), 1.f, dataspace, extended_range_brightness_ratio));
@ -178,7 +178,7 @@ TEST(SurfaceControl, ColorSpaceToADataSpace) {
// sRGB.
{
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
gfx::ColorSpace::CreateSRGB(), 1.f, dataspace,
@ -189,7 +189,7 @@ TEST(SurfaceControl, ColorSpaceToADataSpace) {
// Display P3.
{
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
gfx::ColorSpace::CreateDisplayP3D65(), 1.f, dataspace,
@ -204,34 +204,27 @@ TEST(SurfaceControl, ColorSpaceToADataSpace) {
return;
}
constexpr uint64_t kStandardSRGB = 1 << 16;
constexpr uint64_t kStandardP3 = 10 << 16;
constexpr uint64_t kStandardBT2020 = 6 << 16;
constexpr uint64_t kTransferSRGB = 2 << 22;
constexpr uint64_t kRangeFull = 1 << 27;
constexpr uint64_t kRangeExtended = 3 << 27;
// Rec2020 with an sRGB transfer function.
{
gfx::ColorSpace rec2020(gfx::ColorSpace::PrimaryID::BT2020,
gfx::ColorSpace::TransferID::SRGB);
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
rec2020, 1.f, dataspace, extended_range_brightness_ratio));
EXPECT_EQ(dataspace, kStandardBT2020 | kTransferSRGB | kRangeFull);
EXPECT_EQ(dataspace, STANDARD_BT2020 | TRANSFER_SRGB | RANGE_FULL);
EXPECT_EQ(extended_range_brightness_ratio, 1.f);
}
// sRGB, but it will come out as extended because there is a >1 desired
// brightness ratio.
{
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
gfx::ColorSpace::CreateSRGB(), 4.f, dataspace,
extended_range_brightness_ratio));
EXPECT_EQ(dataspace, kStandardSRGB | kTransferSRGB | kRangeExtended);
EXPECT_EQ(dataspace, STANDARD_BT709 | TRANSFER_SRGB | RANGE_EXTENDED);
EXPECT_EQ(extended_range_brightness_ratio, 1.f);
}
@ -243,11 +236,11 @@ TEST(SurfaceControl, ColorSpaceToADataSpace) {
gfx::ColorSpace::PrimaryID::P3, gfx::ColorSpace::TransferID::CUSTOM_HDR,
gfx::ColorSpace::MatrixID::RGB, gfx::ColorSpace::RangeID::FULL, nullptr,
&trfn_srgb_scaled);
uint64_t dataspace = 0;
ADataSpace dataspace = ADATASPACE_UNKNOWN;
float extended_range_brightness_ratio = 0.f;
EXPECT_TRUE(SurfaceControl::ColorSpaceToADataSpace(
p3_scaled, 1.f, dataspace, extended_range_brightness_ratio));
EXPECT_EQ(dataspace, kStandardP3 | kTransferSRGB | kRangeExtended);
EXPECT_EQ(dataspace, STANDARD_DCI_P3 | TRANSFER_SRGB | RANGE_EXTENDED);
EXPECT_NEAR(extended_range_brightness_ratio, 2.f, 0.0001f);
}
}