parent
c31aa162c2
commit
c86221443c
@ -1,31 +0,0 @@
|
||||
diff -up chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h
|
||||
--- chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland 2022-09-01 19:36:06.099483374 +0000
|
||||
+++ chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h 2022-09-01 22:09:56.523353619 +0000
|
||||
@@ -119,9 +119,27 @@ struct wl_display;
|
||||
*/
|
||||
struct wl_event_queue;
|
||||
|
||||
+/** Destroy proxy after marshalling
|
||||
+ * @ingroup wl_proxy
|
||||
+ */
|
||||
+#define WL_MARSHAL_FLAG_DESTROY (1 << 0)
|
||||
+
|
||||
void
|
||||
wl_event_queue_destroy(struct wl_event_queue *queue);
|
||||
|
||||
+struct wl_proxy *
|
||||
+wl_proxy_marshal_flags(struct wl_proxy *proxy, uint32_t opcode,
|
||||
+ const struct wl_interface *interface,
|
||||
+ uint32_t version,
|
||||
+ uint32_t flags, ...);
|
||||
+
|
||||
+struct wl_proxy *
|
||||
+wl_proxy_marshal_array_flags(struct wl_proxy *proxy, uint32_t opcode,
|
||||
+ const struct wl_interface *interface,
|
||||
+ uint32_t version,
|
||||
+ uint32_t flags,
|
||||
+ union wl_argument *args);
|
||||
+
|
||||
void
|
||||
wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...);
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 3e1e86ac882ae0ce4b9ec50834a4ff8becd912ab Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Mon, 19 Dec 2022 16:59:46 +0000
|
||||
Subject: [PATCH] GCC: move pragmas in blink::CanvasResourceProvider
|
||||
|
||||
GCC does not allow using #pragma inside an enum.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: I637b5a616b080d17bb719aae9ec8cf06d0f8c464
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111848
|
||||
Reviewed-by: Stephen Chenney <schenney@chromium.org>
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1084983}
|
||||
---
|
||||
|
||||
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
|
||||
index e898397f..214ab01 100644
|
||||
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
|
||||
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
|
||||
@@ -68,6 +68,8 @@
|
||||
public:
|
||||
// These values are persisted to logs. Entries should not be renumbered and
|
||||
// numeric values should never be reused.
|
||||
+#pragma GCC diagnostic push
|
||||
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
enum ResourceProviderType {
|
||||
kTexture [[deprecated]] = 0,
|
||||
kBitmap = 1,
|
||||
@@ -79,11 +81,9 @@
|
||||
kPassThrough = 7,
|
||||
kSwapChain = 8,
|
||||
kSkiaDawnSharedImage [[deprecated]] = 9,
|
||||
-#pragma GCC diagnostic push
|
||||
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
kMaxValue = kSkiaDawnSharedImage,
|
||||
-#pragma GCC diagnostic pop
|
||||
};
|
||||
+#pragma GCC diagnostic pop
|
||||
|
||||
// The following parameters attempt to reach a compromise between not flushing
|
||||
// too often, and not accumulating an unreasonable backlog. Flushing too
|
@ -1,41 +0,0 @@
|
||||
From b4e56d22275cae5a910463a966a96345430a83ea Mon Sep 17 00:00:00 2001
|
||||
From: Ivan Murashov <ivan.murashov@lge.com>
|
||||
Date: Sat, 17 Dec 2022 12:06:01 +0000
|
||||
Subject: [PATCH] libstdc++: Don't use const members in std::vector in password_manager::CredentialUIEntry
|
||||
|
||||
Otherwise build fails when building with use_custom_libcxx=false.
|
||||
The error example:
|
||||
std::vector must have a non-const, non-volatile value_type
|
||||
|
||||
Implementation of std::vector in libstdc++ does not allow const.
|
||||
|
||||
Bug: 957519
|
||||
Change-Id: I089de2d52df25138d74dbf01fdf61d6301b4d871
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111037
|
||||
Reviewed-by: Mohamed Amir Yosef <mamir@chromium.org>
|
||||
Commit-Queue: Mohamed Amir Yosef <mamir@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1084697}
|
||||
---
|
||||
|
||||
diff --git a/components/password_manager/core/browser/ui/credential_ui_entry.cc b/components/password_manager/core/browser/ui/credential_ui_entry.cc
|
||||
index 1e0766a..a9a34f7 100644
|
||||
--- a/components/password_manager/core/browser/ui/credential_ui_entry.cc
|
||||
+++ b/components/password_manager/core/browser/ui/credential_ui_entry.cc
|
||||
@@ -97,7 +97,7 @@
|
||||
// For cases when the notes differ within grouped passwords (e.g: a
|
||||
// credential exists in both account and profile stores), respective notes
|
||||
// should be concatenated and linebreak used as a delimiter.
|
||||
- std::vector<const std::u16string> notes_with_duplicates;
|
||||
+ std::vector<std::u16string> notes_with_duplicates;
|
||||
for (const auto& form : forms) {
|
||||
// Only notes with an empty `unique_display_name` are supported in the
|
||||
// settings UI.
|
||||
@@ -109,7 +109,7 @@
|
||||
}
|
||||
auto unique_notes =
|
||||
base::MakeFlatSet<std::u16string>(std::move(notes_with_duplicates));
|
||||
- note = base::JoinString(std::vector<const std::u16string>(
|
||||
+ note = base::JoinString(std::vector<std::u16string>(
|
||||
unique_notes.begin(), unique_notes.end()),
|
||||
u"\n");
|
||||
|
@ -1,37 +0,0 @@
|
||||
From 795c311aae4b718585bc6194189f061000c823a1 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Fri, 23 Dec 2022 14:28:55 +0000
|
||||
Subject: [PATCH] libstdc++: fix narrowing in blink::DarkModeLABColorSpace
|
||||
|
||||
Clang-14 errors out with narrowing from double to float. Use std::pow
|
||||
instead.
|
||||
---
|
||||
.../renderer/platform/graphics/dark_mode_lab_color_space.h | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
|
||||
index 999c3e5..c18ea7b 100644
|
||||
--- a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
|
||||
+++ b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
|
||||
@@ -125,7 +125,7 @@ class DarkModeLABColorSpace {
|
||||
// https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation.
|
||||
SkV3 FromXYZ(const SkV3& v) const {
|
||||
auto f = [](float x) {
|
||||
- return x > kSigma3 ? pow(x, 1.0f / 3.0f)
|
||||
+ return x > kSigma3 ? std::pow(x, 1.0f / 3.0f)
|
||||
: x / (3 * kSigma2) + 4.0f / 29.0f;
|
||||
};
|
||||
|
||||
@@ -145,7 +145,8 @@ class DarkModeLABColorSpace {
|
||||
// https://en.wikipedia.org/wiki/CIELAB_color_space#Forward_transformation.
|
||||
SkV3 ToXYZ(const SkV3& lab) const {
|
||||
auto invf = [](float x) {
|
||||
- return x > kSigma ? pow(x, 3.0f) : 3.0f * kSigma2 * (x - 4.0f / 29.0f);
|
||||
+ return x > kSigma ? std::pow(x, 3.0f)
|
||||
+ : 3.0f * kSigma2 * (x - 4.0f / 29.0f);
|
||||
};
|
||||
|
||||
SkV3 v = {Clamp(lab.x, 0.0f, 100.0f), Clamp(lab.y, -128.0f, 128.0f),
|
||||
--
|
||||
2.38.2
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 63027c62eaa1b6c5b0d2762a511f1611b15d3728 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Mon, 19 Dec 2022 13:56:17 +0000
|
||||
Subject: [PATCH] libstdc++: fix incomplete type of download::InProgressDownloadManager
|
||||
|
||||
Destructor of std::unique_ptr in libstdc++ uses sizeof() which
|
||||
requires full definition of download::InProgressDownloadManager
|
||||
for return type of content::BrowserContext::
|
||||
RetrieveInProgressDownloadManager().
|
||||
|
||||
Bug: 957519
|
||||
Change-Id: If99aa8d52238bacb1cb559a300e14ed3a05b7297
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111526
|
||||
Reviewed-by: Bo Liu <boliu@chromium.org>
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1084924}
|
||||
---
|
||||
|
||||
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
|
||||
index 6180969..22e9dbb 100644
|
||||
--- a/content/browser/browser_context.cc
|
||||
+++ b/content/browser/browser_context.cc
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "base/unguessable_token.h"
|
||||
#include "build/build_config.h"
|
||||
#include "build/chromeos_buildflags.h"
|
||||
+#include "components/download/public/common/in_progress_download_manager.h"
|
||||
#include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h"
|
||||
#include "content/browser/blob_storage/chrome_blob_storage_context.h"
|
||||
#include "content/browser/browser_context_impl.h"
|
@ -1,29 +0,0 @@
|
||||
From 07f0a87e4409f27854b3a1d17f270a3497f38947 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Mon, 19 Dec 2022 19:07:37 +0000
|
||||
Subject: [PATCH] GCC: use fabsf in ui::NativeThemeBase::OutlineColor
|
||||
|
||||
Template deduction fails for base::clamp, because return type of
|
||||
fabs is double and all other parameters are float.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: I34f1c9c99d13f69097d899bfcb0526cbdf4fe1c1
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110869
|
||||
Reviewed-by: Peter Kasting <pkasting@chromium.org>
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1085034}
|
||||
---
|
||||
|
||||
diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc
|
||||
index 169c60c..36db49a 100644
|
||||
--- a/ui/native_theme/native_theme_base.cc
|
||||
+++ b/ui/native_theme/native_theme_base.cc
|
||||
@@ -1336,7 +1336,7 @@
|
||||
// The following code has been tested to look OK with all of the
|
||||
// default GTK themes.
|
||||
SkScalar min_diff = base::clamp((hsv1[1] + hsv2[1]) * 1.2f, 0.28f, 0.5f);
|
||||
- SkScalar diff = base::clamp(fabs(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f);
|
||||
+ SkScalar diff = base::clamp(fabsf(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f);
|
||||
|
||||
if (hsv1[2] + hsv2[2] > 1.0)
|
||||
diff = -diff;
|
@ -1,26 +0,0 @@
|
||||
From c69b818a9fce2bf0fb81b280d6f4cc15e6fdb8af Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Fri, 16 Dec 2022 17:13:43 +0000
|
||||
Subject: [PATCH] GCC: fix incomplete type of gl::Presenter
|
||||
|
||||
GCC requires full definition of gl::Presenter for return type
|
||||
of gl::GLOzoneEGL::CreateGLContext() with base::scoped_refptr.
|
||||
---
|
||||
ui/ozone/common/gl_ozone_egl.cc | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/ui/ozone/common/gl_ozone_egl.cc b/ui/ozone/common/gl_ozone_egl.cc
|
||||
index 9b1d37e..e745dd7 100644
|
||||
--- a/ui/ozone/common/gl_ozone_egl.cc
|
||||
+++ b/ui/ozone/common/gl_ozone_egl.cc
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "ui/gl/gl_share_group.h"
|
||||
#include "ui/gl/gl_surface.h"
|
||||
#include "ui/gl/gl_utils.h"
|
||||
+#include "ui/gl/presenter.h"
|
||||
|
||||
namespace ui {
|
||||
|
||||
--
|
||||
2.37.4
|
||||
|
@ -1,74 +0,0 @@
|
||||
From 200fc7c3ec95bc86f6afb55ca3c691e923463104 Mon Sep 17 00:00:00 2001
|
||||
From: Leonid Baraz <lbaraz@chromium.org>
|
||||
Date: Mon, 19 Dec 2022 21:46:04 +0000
|
||||
Subject: [PATCH] GCC: fix usage of decltype in reporting::StorageQueue
|
||||
|
||||
GCC does not allow to use decltype for the default value of
|
||||
a function parameter.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: I7ebb255634375ce889933f8b67acb10f0e56ca8d
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111548
|
||||
Reviewed-by: Leonid Baraz <lbaraz@chromium.org>
|
||||
Commit-Queue: Leonid Baraz <lbaraz@chromium.org>
|
||||
Reviewed-by: Hong Xu <xuhong@google.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1085129}
|
||||
---
|
||||
|
||||
diff --git a/components/reporting/storage/storage_queue.cc b/components/reporting/storage/storage_queue.cc
|
||||
index c546d55a..49e0f2c 100644
|
||||
--- a/components/reporting/storage/storage_queue.cc
|
||||
+++ b/components/reporting/storage/storage_queue.cc
|
||||
@@ -203,7 +203,6 @@
|
||||
encryption_module_(encryption_module),
|
||||
compression_module_(compression_module) {
|
||||
DETACH_FROM_SEQUENCE(storage_queue_sequence_checker_);
|
||||
- DCHECK(write_contexts_queue_.empty());
|
||||
}
|
||||
|
||||
StorageQueue::~StorageQueue() {
|
||||
@@ -2133,9 +2132,7 @@
|
||||
}
|
||||
|
||||
void StorageQueue::TestInjectErrorsForOperation(
|
||||
- base::RepeatingCallback<
|
||||
- Status(test::StorageQueueOperationKind operation_kind, int64_t)>
|
||||
- handler) {
|
||||
+ test::ErrorInjectionHandlerType handler) {
|
||||
test_injection_handler_ = handler;
|
||||
}
|
||||
|
||||
diff --git a/components/reporting/storage/storage_queue.h b/components/reporting/storage/storage_queue.h
|
||||
index 39edd8b..04d5f9f 100644
|
||||
--- a/components/reporting/storage/storage_queue.h
|
||||
+++ b/components/reporting/storage/storage_queue.h
|
||||
@@ -52,6 +52,9 @@
|
||||
kWriteLowDiskSpace,
|
||||
};
|
||||
|
||||
+using ErrorInjectionHandlerType =
|
||||
+ base::RepeatingCallback<Status(test::StorageQueueOperationKind, int64_t)>;
|
||||
+
|
||||
} // namespace test
|
||||
|
||||
// Storage queue represents single queue of data to be collected and stored
|
||||
@@ -142,8 +145,7 @@
|
||||
// can be returned as a resulting operation status too.
|
||||
// If `handler` is null, error injections is disabled.
|
||||
void TestInjectErrorsForOperation(
|
||||
- base::RepeatingCallback<Status(test::StorageQueueOperationKind, int64_t)>
|
||||
- handler = decltype(handler)());
|
||||
+ test::ErrorInjectionHandlerType handler = base::NullCallback());
|
||||
|
||||
// Access queue options.
|
||||
const QueueOptions& options() const { return options_; }
|
||||
@@ -492,8 +494,7 @@
|
||||
// Test only: records callback to be invoked. It will be called with operation
|
||||
// kind and seq id, and will return Status (non-OK status indicates the
|
||||
// failure to be injected). In production code must be null.
|
||||
- base::RepeatingCallback<Status(test::StorageQueueOperationKind, int64_t)>
|
||||
- test_injection_handler_;
|
||||
+ test::ErrorInjectionHandlerType test_injection_handler_{base::NullCallback()};
|
||||
|
||||
// Weak pointer factory (must be last member in class).
|
||||
base::WeakPtrFactory<StorageQueue> weakptr_factory_{this};
|
@ -1,28 +0,0 @@
|
||||
From da8029438ea8f00a154cb6a1bbc8243de39690de Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Sun, 18 Dec 2022 22:11:58 +0000
|
||||
Subject: [PATCH] GCC: remove redundant template parameter from SyncIterator
|
||||
|
||||
GCC 12 in C++20 mode does not allow this anymore.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: I6b22d3919f08fb72a5b1d69eea59c6e95259c16f
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111547
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Reviewed-by: Kentaro Hara <haraken@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1084808}
|
||||
---
|
||||
|
||||
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
|
||||
index 1d67fa2..9cec5094 100644
|
||||
--- a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
|
||||
+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
|
||||
@@ -36,7 +36,7 @@
|
||||
member_initializer_list=[
|
||||
"${base_class_name}(source, kind)",
|
||||
]),
|
||||
- CxxFuncDeclNode(name="~${class_name}",
|
||||
+ CxxFuncDeclNode(name="~SyncIterator",
|
||||
arg_decls=[],
|
||||
return_type="",
|
||||
override=True,
|
@ -1,94 +0,0 @@
|
||||
From df728d2e2fe8284316ed083c5a210bca1e50986e Mon Sep 17 00:00:00 2001
|
||||
From: Jose Dapena Paz <jdapena@igalia.com>
|
||||
Date: Mon, 16 Jan 2023 12:53:21 +0100
|
||||
Subject: [PATCH] GCC: fix distributed point functions build in ARM64 with SVE
|
||||
|
||||
SVE build is broken in ARM64, because distributed_point_functions
|
||||
is trying to use operator& and operator|.
|
||||
|
||||
Bug:819294
|
||||
Change-Id: I465efa475ed59031a2cfaf4172ef9fbd8bb05050
|
||||
---
|
||||
dpf/internal/evaluate_prg_hwy.cc | 34 ++++++++++++++------------------
|
||||
1 file changed, 15 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/dpf/internal/evaluate_prg_hwy.cc b/dpf/internal/evaluate_prg_hwy.cc
|
||||
index 3d743f4..a1dd8e0 100644
|
||||
--- a//third_party/distributed_point_functions/code/dpf/internal/evaluate_prg_hwy.cc
|
||||
+++ b//third_party/distributed_point_functions/code/dpf/internal/evaluate_prg_hwy.cc
|
||||
@@ -124,14 +124,14 @@ auto IsBitSet(D d, const V input, int index) {
|
||||
|
||||
// Compute input AND index_64 on 64-bit integers.
|
||||
auto input_64 = hn::BitCast(d64, input);
|
||||
- input_64 &= index_64;
|
||||
+ input_64 = hn::And(input_64, index_64);
|
||||
|
||||
// Take the OR of every two adjacent 64-bit integers. This ensures that each
|
||||
// half of an 128-bit block is nonzero iff at least one half was nonzero.
|
||||
- input_64 |= hn::Shuffle01(input_64);
|
||||
+ input_64 = hn::Or(input_64, hn::Shuffle01(input_64));
|
||||
|
||||
// Compute a 64-bit mask that checks which integers are nonzero.
|
||||
- return input_64 != hn::Zero(d64);
|
||||
+ return hn::Ne(input_64, hn::Zero(d64));
|
||||
}
|
||||
|
||||
// Dummy struct to get HWY_ALIGN as a number, for testing if an array of
|
||||
@@ -236,24 +236,20 @@ absl::Status EvaluateSeedsHwy(
|
||||
// Apply correction.
|
||||
const auto correction_seed = hn::LoadDup128(
|
||||
d64, reinterpret_cast<const uint64_t*>(correction_seeds + j));
|
||||
- vec_0 ^=
|
||||
- hn::BitCast(d8, hn::IfThenElseZero(control_mask_0, correction_seed));
|
||||
- vec_1 ^=
|
||||
- hn::BitCast(d8, hn::IfThenElseZero(control_mask_1, correction_seed));
|
||||
- vec_2 ^=
|
||||
- hn::BitCast(d8, hn::IfThenElseZero(control_mask_2, correction_seed));
|
||||
- vec_3 ^=
|
||||
- hn::BitCast(d8, hn::IfThenElseZero(control_mask_3, correction_seed));
|
||||
+ vec_0 = hn::Xor(vec_0, hn::BitCast(d8, hn::IfThenElseZero(control_mask_0, correction_seed)));
|
||||
+ vec_1 = hn::Xor(vec_1, hn::BitCast(d8, hn::IfThenElseZero(control_mask_1, correction_seed)));
|
||||
+ vec_2 = hn::Xor(vec_2, hn::BitCast(d8, hn::IfThenElseZero(control_mask_2, correction_seed)));
|
||||
+ vec_3 = hn::Xor(vec_3, hn::BitCast(d8, hn::IfThenElseZero(control_mask_3, correction_seed)));
|
||||
|
||||
// Extract control bit for next level.
|
||||
const auto next_control_mask_0 = IsBitSet(d8, vec_0, 0);
|
||||
const auto next_control_mask_1 = IsBitSet(d8, vec_1, 0);
|
||||
const auto next_control_mask_2 = IsBitSet(d8, vec_2, 0);
|
||||
const auto next_control_mask_3 = IsBitSet(d8, vec_3, 0);
|
||||
- vec_0 &= clear_lowest_bit;
|
||||
- vec_1 &= clear_lowest_bit;
|
||||
- vec_2 &= clear_lowest_bit;
|
||||
- vec_3 &= clear_lowest_bit;
|
||||
+ vec_0 = hn::And(vec_0, clear_lowest_bit);
|
||||
+ vec_1 = hn::And(vec_1, clear_lowest_bit);
|
||||
+ vec_2 = hn::And(vec_2, clear_lowest_bit);
|
||||
+ vec_3 = hn::And(vec_3, clear_lowest_bit);
|
||||
|
||||
// Perform control bit correction.
|
||||
const auto correction_control_mask_left =
|
||||
@@ -321,10 +317,10 @@ absl::Status EvaluateSeedsHwy(
|
||||
// Apply correction.
|
||||
const auto correction_seed = hn::LoadDup128(
|
||||
d64, reinterpret_cast<const uint64_t*>(correction_seeds + j));
|
||||
- vec ^= hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed));
|
||||
+ vec = hn::Xor(vec, hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed)));
|
||||
// Extract control bit for next level.
|
||||
const auto next_control_mask = IsBitSet(d8, vec, 0);
|
||||
- vec &= clear_lowest_bit;
|
||||
+ vec = hn::And(vec, clear_lowest_bit);
|
||||
|
||||
// Perform control bit correction.
|
||||
const auto correction_control_mask_left =
|
||||
@@ -376,9 +372,9 @@ absl::Status EvaluateSeedsHwy(
|
||||
// Perform seed correction.
|
||||
const auto correction_seed = hn::LoadDup128(
|
||||
d64, reinterpret_cast<const uint64_t*>(correction_seeds + j));
|
||||
- vec ^= hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed));
|
||||
+ vec = hn::Xor(vec, hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed)));
|
||||
const auto next_control_mask = IsBitSet(d8, vec, 0);
|
||||
- vec &= clear_lowest_bit;
|
||||
+ vec = hn::And(vec, clear_lowest_bit);
|
||||
const auto correction_control_mask_left =
|
||||
correction_controls_left[j] ? mask_all_one : mask_all_zero;
|
||||
const auto correction_control_mask_right =
|
@ -1,28 +0,0 @@
|
||||
From 3084e834a211e85f6a17e6f8dceb6b44117211d2 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Wed, 21 Dec 2022 19:22:46 +0000
|
||||
Subject: [PATCH] GCC: fix conflicting type for kCustomizeChromeColors
|
||||
|
||||
GCC cannot match auto with previous declaration.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: Ie648daaf264fb2ea177ac46c8a510d481f6fa2f4
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110870
|
||||
Reviewed-by: Tibor Goldschwendt <tiborg@chromium.org>
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1086011}
|
||||
---
|
||||
|
||||
diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc
|
||||
index 2fccadb..383c9e5 100644
|
||||
--- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc
|
||||
+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc
|
||||
@@ -31,5 +31,6 @@
|
||||
|
||||
} // namespace
|
||||
|
||||
-const auto kCustomizeChromeColors = MakeCustomizeChromeColors(
|
||||
- std::make_index_sequence<std::size(kCustomizeChromeColorIds)>{});
|
||||
+const decltype(kCustomizeChromeColors) kCustomizeChromeColors =
|
||||
+ MakeCustomizeChromeColors(
|
||||
+ std::make_index_sequence<std::size(kCustomizeChromeColorIds)>{});
|
@ -1,11 +0,0 @@
|
||||
diff -up chromium-110.0.5481.177/base/memory/ref_counted.h.me chromium-110.0.5481.177/base/memory/ref_counted.h
|
||||
--- chromium-110.0.5481.177/base/memory/ref_counted.h.me 2023-02-23 13:34:33.174817255 -0500
|
||||
+++ chromium-110.0.5481.177/base/memory/ref_counted.h 2023-02-23 13:42:28.646052469 -0500
|
||||
@@ -6,6 +6,7 @@
|
||||
#define BASE_MEMORY_REF_COUNTED_H_
|
||||
|
||||
#include <stddef.h>
|
||||
+#include <limits>
|
||||
|
||||
#include <utility>
|
||||
|
@ -1,31 +0,0 @@
|
||||
From bd3af998439424886c641279b6f9bb6e950c7142 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Sun, 18 Dec 2022 16:12:29 +0000
|
||||
Subject: [PATCH] GCC: make raw_ptr::operator bool constexpr
|
||||
|
||||
Required because autofill::internal::FormForest uses it in
|
||||
a constexpr method.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: Ib2258c9d98c2e7f88ad192b517b487f834a87481
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110924
|
||||
Reviewed-by: Bartek Nowierski <bartekn@chromium.org>
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Cr-Commit-Position: refs/heads/main@{#1084785}
|
||||
---
|
||||
|
||||
diff --git a/base/memory/raw_ptr.h b/base/memory/raw_ptr.h
|
||||
index 4191f0e..a22f64b7 100644
|
||||
--- a/base/memory/raw_ptr.h
|
||||
+++ b/base/memory/raw_ptr.h
|
||||
@@ -1301,7 +1301,9 @@
|
||||
// possible, so use it only if absolutely necessary (e.g. for const_cast).
|
||||
PA_ALWAYS_INLINE T* get() const { return GetForExtraction(); }
|
||||
|
||||
- explicit PA_ALWAYS_INLINE operator bool() const { return !!wrapped_ptr_; }
|
||||
+ constexpr explicit PA_ALWAYS_INLINE operator bool() const {
|
||||
+ return !!wrapped_ptr_;
|
||||
+ }
|
||||
|
||||
template <typename U = T,
|
||||
typename Unused = std::enable_if_t<
|
@ -1,34 +0,0 @@
|
||||
From 740d1102e3fdaaed5441b5656205df9d7e422c3a Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Tue, 20 Dec 2022 20:41:12 +0000
|
||||
Subject: [PATCH] GCC: add cast for vector types in url/url_canon_internal.cc
|
||||
|
||||
GCC requires lax vector conversion for converting __vector(16) to
|
||||
SIMD types. Add explicit cast instead.
|
||||
|
||||
Bug: 819294
|
||||
Change-Id: Icfc9d3586350af469bfd9d83b355d94806430c43
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110786
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1085617}
|
||||
---
|
||||
|
||||
diff --git a/url/url_canon_internal.cc b/url/url_canon_internal.cc
|
||||
index e4f7949..f621920 100644
|
||||
--- a/url/url_canon_internal.cc
|
||||
+++ b/url/url_canon_internal.cc
|
||||
@@ -49,11 +49,11 @@
|
||||
auto mask = b >= 0x24 && b <= 0x7e && b != 0x27 && b != 0x3c && b != 0x3e;
|
||||
|
||||
#ifdef __SSE2__
|
||||
- if (_mm_movemask_epi8(mask) != 0xffff) {
|
||||
+ if (_mm_movemask_epi8(reinterpret_cast<__m128i>(mask)) != 0xffff) {
|
||||
return i;
|
||||
}
|
||||
#else
|
||||
- if (vminvq_u8(mask) == 0) {
|
||||
+ if (vminvq_u8(reinterpret_cast<uint8x16_t>(mask)) == 0) {
|
||||
return i;
|
||||
}
|
||||
#endif
|
@ -1,33 +0,0 @@
|
||||
From 15d123009b7e987e946309cd5724ae17f376bd16 Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Hartmann <stha09@googlemail.com>
|
||||
Date: Sun, 18 Dec 2022 16:26:02 +0100
|
||||
Subject: [PATCH] GCC: fix selection of IMMEDIATE_CRASH
|
||||
|
||||
immediate_crash.h still uses V8_CC_GCC define to determine which
|
||||
IMMEDIATE_CRASH macro is used. This should be V8_CC_GNU instead.
|
||||
Otherwise weird compile errors are happening with turboshaft.
|
||||
|
||||
Bug: chromium:819294
|
||||
Change-Id: Id77fe7406ae16a804e1e466844f81d6c728ec008
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4111849
|
||||
Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
|
||||
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#84923}
|
||||
---
|
||||
|
||||
diff --git a/src/base/immediate-crash.h b/src/base/immediate-crash.h
|
||||
index 770cb27..ce6240b 100644
|
||||
--- a/v8/src/base/immediate-crash.h
|
||||
+++ b/v8/src/base/immediate-crash.h
|
||||
@@ -140,9 +140,9 @@
|
||||
[] { TRAP_SEQUENCE_(); }(); \
|
||||
} while (false)
|
||||
|
||||
-#endif // !V8_CC_GCC
|
||||
+#endif // !V8_CC_GNU
|
||||
|
||||
-#if defined(__clang__) || V8_CC_GCC
|
||||
+#if defined(__clang__) || V8_CC_GNU
|
||||
|
||||
// __builtin_unreachable() hints to the compiler that this is noreturn and can
|
||||
// be packed in the function epilogue.
|
File diff suppressed because it is too large
Load Diff
@ -1,198 +0,0 @@
|
||||
From 916641c08de44e0a915df223d55781c6c912717c Mon Sep 17 00:00:00 2001
|
||||
From: Nikolaos Papaspyrou <nikolaos@chromium.org>
|
||||
Date: Thu, 19 Jan 2023 13:43:10 +0100
|
||||
Subject: [PATCH] [heap] Move the Stack object from ThreadLocalTop to Isolate
|
||||
|
||||
Stack information is thread-specific and, until now, it was stored in a
|
||||
field in ThreadLocalTop. This CL moves stack information to the isolate
|
||||
and makes sure to update the stack start whenever a main thread enters
|
||||
the isolate. At the same time, the Stack object is refactored and
|
||||
simplified.
|
||||
|
||||
As a side effect, after removing the Stack object, ThreadLocalTop
|
||||
satisfies the std::standard_layout trait; this fixes some issues
|
||||
observed with different C++ compilers.
|
||||
|
||||
Bug: v8:13630
|
||||
Bug: v8:13257
|
||||
Change-Id: I026a35af3bc6999a09b21f277756d4454c086343
|
||||
|
||||
(stripped tests)
|
||||
---
|
||||
|
||||
diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc
|
||||
index 31536a1..22b8492 100644
|
||||
--- a/v8/src/execution/isolate.cc
|
||||
+++ b/v8/src/execution/isolate.cc
|
||||
@@ -3069,21 +3069,23 @@
|
||||
void Isolate::RecordStackSwitchForScanning() {
|
||||
Object current = root(RootIndex::kActiveContinuation);
|
||||
DCHECK(!current.IsUndefined());
|
||||
- thread_local_top()->stack_.ClearStackSegments();
|
||||
- wasm::StackMemory* stack = Managed<wasm::StackMemory>::cast(
|
||||
- WasmContinuationObject::cast(current).stack())
|
||||
- .get()
|
||||
- .get();
|
||||
+ stack().ClearStackSegments();
|
||||
+ wasm::StackMemory* wasm_stack =
|
||||
+ Managed<wasm::StackMemory>::cast(
|
||||
+ WasmContinuationObject::cast(current).stack())
|
||||
+ .get()
|
||||
+ .get();
|
||||
current = WasmContinuationObject::cast(current).parent();
|
||||
- heap()->SetStackStart(reinterpret_cast<void*>(stack->base()));
|
||||
+ heap()->SetStackStart(reinterpret_cast<void*>(wasm_stack->base()));
|
||||
// We don't need to add all inactive stacks. Only the ones in the active chain
|
||||
// may contain cpp heap pointers.
|
||||
while (!current.IsUndefined()) {
|
||||
auto cont = WasmContinuationObject::cast(current);
|
||||
- auto* stack = Managed<wasm::StackMemory>::cast(cont.stack()).get().get();
|
||||
- thread_local_top()->stack_.AddStackSegment(
|
||||
- reinterpret_cast<const void*>(stack->base()),
|
||||
- reinterpret_cast<const void*>(stack->jmpbuf()->sp));
|
||||
+ auto* wasm_stack =
|
||||
+ Managed<wasm::StackMemory>::cast(cont.stack()).get().get();
|
||||
+ stack().AddStackSegment(
|
||||
+ reinterpret_cast<const void*>(wasm_stack->base()),
|
||||
+ reinterpret_cast<const void*>(wasm_stack->jmpbuf()->sp));
|
||||
current = cont.parent();
|
||||
}
|
||||
}
|
||||
@@ -3371,23 +3373,13 @@
|
||||
Isolate* saved_isolate = isolate->TryGetCurrent();
|
||||
SetIsolateThreadLocals(isolate, nullptr);
|
||||
isolate->set_thread_id(ThreadId::Current());
|
||||
- if (saved_isolate) {
|
||||
- isolate->thread_local_top()->stack_ =
|
||||
- std::move(saved_isolate->thread_local_top()->stack_);
|
||||
- } else {
|
||||
- isolate->heap()->SetStackStart(base::Stack::GetStackStart());
|
||||
- }
|
||||
+ isolate->heap()->SetStackStart(base::Stack::GetStackStart());
|
||||
|
||||
bool owns_shared_isolate = isolate->owns_shared_isolate_;
|
||||
Isolate* maybe_shared_isolate = isolate->shared_isolate_;
|
||||
|
||||
isolate->Deinit();
|
||||
|
||||
- // Restore the saved isolate's stack.
|
||||
- if (saved_isolate)
|
||||
- saved_isolate->thread_local_top()->stack_ =
|
||||
- std::move(isolate->thread_local_top()->stack_);
|
||||
-
|
||||
#ifdef DEBUG
|
||||
non_disposed_isolates_--;
|
||||
#endif // DEBUG
|
||||
@@ -4652,6 +4644,10 @@
|
||||
void Isolate::Enter() {
|
||||
Isolate* current_isolate = nullptr;
|
||||
PerIsolateThreadData* current_data = CurrentPerIsolateThreadData();
|
||||
+
|
||||
+ // Set the stack start for the main thread that enters the isolate.
|
||||
+ heap()->SetStackStart(base::Stack::GetStackStart());
|
||||
+
|
||||
if (current_data != nullptr) {
|
||||
current_isolate = current_data->isolate_;
|
||||
DCHECK_NOT_NULL(current_isolate);
|
||||
diff --git a/src/execution/isolate.h b/src/execution/isolate.h
|
||||
index afc3d0b..415e476 100644
|
||||
--- a/v8/src/execution/isolate.h
|
||||
+++ b/v8/src/execution/isolate.h
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "src/execution/stack-guard.h"
|
||||
#include "src/handles/handles.h"
|
||||
#include "src/handles/traced-handles.h"
|
||||
+#include "src/heap/base/stack.h"
|
||||
#include "src/heap/factory.h"
|
||||
#include "src/heap/heap.h"
|
||||
#include "src/heap/read-only-heap.h"
|
||||
@@ -2028,6 +2029,8 @@
|
||||
SimulatorData* simulator_data() { return simulator_data_; }
|
||||
#endif
|
||||
|
||||
+ ::heap::base::Stack& stack() { return stack_; }
|
||||
+
|
||||
#ifdef V8_ENABLE_WEBASSEMBLY
|
||||
wasm::StackMemory*& wasm_stacks() { return wasm_stacks_; }
|
||||
// Update the thread local's Stack object so that it is aware of the new stack
|
||||
@@ -2526,6 +2529,9 @@
|
||||
// The mutex only guards adding pages, the retrieval is signal safe.
|
||||
base::Mutex code_pages_mutex_;
|
||||
|
||||
+ // Stack information for the main thread.
|
||||
+ ::heap::base::Stack stack_;
|
||||
+
|
||||
#ifdef V8_ENABLE_WEBASSEMBLY
|
||||
wasm::StackMemory* wasm_stacks_;
|
||||
#endif
|
||||
diff --git a/src/execution/thread-local-top.cc b/src/execution/thread-local-top.cc
|
||||
index c115ae0..05cc20b 100644
|
||||
--- a/v8/src/execution/thread-local-top.cc
|
||||
+++ b/v8/src/execution/thread-local-top.cc
|
||||
@@ -37,7 +37,6 @@
|
||||
current_embedder_state_ = nullptr;
|
||||
failed_access_check_callback_ = nullptr;
|
||||
thread_in_wasm_flag_address_ = kNullAddress;
|
||||
- stack_ = ::heap::base::Stack();
|
||||
}
|
||||
|
||||
void ThreadLocalTop::Initialize(Isolate* isolate) {
|
||||
@@ -45,12 +44,8 @@
|
||||
isolate_ = isolate;
|
||||
thread_id_ = ThreadId::Current();
|
||||
#if V8_ENABLE_WEBASSEMBLY
|
||||
- stack_.SetStackStart(base::Stack::GetStackStart(),
|
||||
- v8_flags.experimental_wasm_stack_switching);
|
||||
thread_in_wasm_flag_address_ = reinterpret_cast<Address>(
|
||||
trap_handler::GetThreadInWasmThreadLocalAddress());
|
||||
-#else
|
||||
- stack_.SetStackStart(base::Stack::GetStackStart(), false);
|
||||
#endif // V8_ENABLE_WEBASSEMBLY
|
||||
#ifdef USE_SIMULATOR
|
||||
simulator_ = Simulator::current(isolate);
|
||||
diff --git a/src/execution/thread-local-top.h b/src/execution/thread-local-top.h
|
||||
index 43fec0a..989c817 100644
|
||||
--- a/v8/src/execution/thread-local-top.h
|
||||
+++ b/v8/src/execution/thread-local-top.h
|
||||
@@ -10,7 +10,6 @@
|
||||
#include "include/v8-unwinder.h"
|
||||
#include "src/common/globals.h"
|
||||
#include "src/execution/thread-id.h"
|
||||
-#include "src/heap/base/stack.h"
|
||||
#include "src/objects/contexts.h"
|
||||
#include "src/utils/utils.h"
|
||||
|
||||
@@ -30,7 +29,7 @@
|
||||
// TODO(all): This is not particularly beautiful. We should probably
|
||||
// refactor this to really consist of just Addresses and 32-bit
|
||||
// integer fields.
|
||||
- static constexpr uint32_t kSizeInBytes = 30 * kSystemPointerSize;
|
||||
+ static constexpr uint32_t kSizeInBytes = 25 * kSystemPointerSize;
|
||||
|
||||
// Does early low-level initialization that does not depend on the
|
||||
// isolate being present.
|
||||
@@ -147,9 +146,6 @@
|
||||
|
||||
// Address of the thread-local "thread in wasm" flag.
|
||||
Address thread_in_wasm_flag_address_;
|
||||
-
|
||||
- // Stack information.
|
||||
- ::heap::base::Stack stack_;
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
||||
index f4b7da0..6efd486 100644
|
||||
--- a/v8/src/heap/heap.cc
|
||||
+++ b/v8/src/heap/heap.cc
|
||||
@@ -5830,9 +5830,7 @@
|
||||
#endif // V8_ENABLE_WEBASSEMBLY
|
||||
}
|
||||
|
||||
-::heap::base::Stack& Heap::stack() {
|
||||
- return isolate_->thread_local_top()->stack_;
|
||||
-}
|
||||
+::heap::base::Stack& Heap::stack() { return isolate_->stack(); }
|
||||
|
||||
void Heap::StartTearDown() {
|
||||
// Finish any ongoing sweeping to avoid stray background tasks still accessing
|
@ -1,24 +0,0 @@
|
||||
diff -up chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h
|
||||
--- chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash 2021-10-05 16:04:46.313586509 -0400
|
||||
+++ chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h 2021-10-05 16:05:12.213732558 -0400
|
||||
@@ -228,6 +228,11 @@ class VIEWS_EXPORT InkDropHost {
|
||||
// Used to observe View and inform the InkDrop of host-transform changes.
|
||||
ViewLayerTransformObserver host_view_transform_observer_;
|
||||
|
||||
+ // Declared before |ink_drop_|, because InkDropImpl may call
|
||||
+ // RemoveInkDropLayer on partly destructed InkDropHost. In
|
||||
+ // that case |ink_drop_mask_| must be still valid.
|
||||
+ std::unique_ptr<views::InkDropMask> ink_drop_mask_;
|
||||
+
|
||||
// Should not be accessed directly. Use GetInkDrop() instead.
|
||||
std::unique_ptr<InkDrop> ink_drop_;
|
||||
|
||||
@@ -249,8 +254,6 @@ class VIEWS_EXPORT InkDropHost {
|
||||
int ink_drop_small_corner_radius_ = 2;
|
||||
int ink_drop_large_corner_radius_ = 4;
|
||||
|
||||
- std::unique_ptr<views::InkDropMask> ink_drop_mask_;
|
||||
-
|
||||
base::RepeatingCallback<std::unique_ptr<InkDrop>()> create_ink_drop_callback_;
|
||||
base::RepeatingCallback<std::unique_ptr<InkDropRipple>()>
|
||||
create_ink_drop_ripple_callback_;
|
@ -1,137 +0,0 @@
|
||||
commit e775ac4770bb1e5dfbfe22c5b56752ed4a2317c5
|
||||
Author: Hirokazu Honda <hiroh@chromium.org>
|
||||
Date: Tue Jan 17 17:54:02 2023 +0000
|
||||
|
||||
Revert "media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf"
|
||||
|
||||
This reverts commit 203fdd03a4317f2eac57161ee101515a82df704f.
|
||||
|
||||
Reason for revert: This workaround is no longer required because of
|
||||
the kernel patch was reverted.
|
||||
|
||||
Original change's description:
|
||||
> media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf
|
||||
>
|
||||
> VideoFrame fed in VEA::Encode() is read-only since R107 if the
|
||||
> VideoFrame has a shared memory. V4L2VideoEncodeAccelerator fails
|
||||
> because VIDOC_QBUF with USERPTR buffer fails if the pointers
|
||||
> references a read-only buffer.
|
||||
> The USERPTR API issue is apparently to be fixed by a kernel side.
|
||||
> In the meantime, this CL adds the workaround to the issue; the read
|
||||
> only buffer is copied to a writable temporary buffer every Encode
|
||||
> before VIDIOC_QBUF.
|
||||
> Not that VideoFrame has a shared memory in the case of screen share
|
||||
> because a camera stack produces GpuMemoryBuffer.
|
||||
>
|
||||
> Bug: b:243883312
|
||||
> Test: video_encode_accelerator_tests on elm, kevin and trogdor
|
||||
> Test: screen share in Google Meet on elm, kevin and trogdor
|
||||
> Change-Id: I922d98eaf52f80d9cd6c3784a8544bffb1232856
|
||||
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3891421
|
||||
> Reviewed-by: Nathan Hebert <nhebert@chromium.org>
|
||||
> Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
|
||||
> Cr-Commit-Position: refs/heads/main@{#1046659}
|
||||
|
||||
Bug: b:243883312, b:261660224
|
||||
Change-Id: I6fe37276f2ebe8c8730cfd3dd766b04277b32a67
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4091205
|
||||
Reviewed-by: Nathan Hebert <nhebert@chromium.org>
|
||||
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
|
||||
Cr-Commit-Position: refs/heads/main@{#1093388}
|
||||
|
||||
diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc
|
||||
index dc72a4ac060a9..f3049f4546e2e 100644
|
||||
--- a/media/gpu/v4l2/v4l2_image_processor_backend.cc
|
||||
+++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc
|
||||
@@ -925,35 +925,16 @@ bool V4L2ImageProcessorBackend::EnqueueInputRecord(
|
||||
|
||||
switch (input_memory_type_) {
|
||||
case V4L2_MEMORY_USERPTR: {
|
||||
- VideoFrame& frame = *job_record->input_frame;
|
||||
const size_t num_planes = V4L2Device::GetNumPlanesOfV4L2PixFmt(
|
||||
input_config_.fourcc.ToV4L2PixFmt());
|
||||
std::vector<void*> user_ptrs(num_planes);
|
||||
- if (frame.storage_type() == VideoFrame::STORAGE_SHMEM) {
|
||||
- // TODO(b/243883312): This copies the video frame to a writable buffer
|
||||
- // since the USERPTR API requires writable permission. Remove this
|
||||
- // workaround once the unreasonable permission is fixed.
|
||||
- const size_t buffer_size = frame.shm_region()->GetSize();
|
||||
- std::vector<uint8_t> writable_buffer(buffer_size);
|
||||
- std::memcpy(writable_buffer.data(), frame.data(0), buffer_size);
|
||||
- for (size_t i = 0; i < num_planes; ++i) {
|
||||
- const std::intptr_t plane_offset =
|
||||
- reinterpret_cast<std::intptr_t>(frame.data(i)) -
|
||||
- reinterpret_cast<std::intptr_t>(frame.data(0));
|
||||
- user_ptrs[i] = writable_buffer.data() + plane_offset;
|
||||
- }
|
||||
- job_record->input_frame->AddDestructionObserver(base::BindOnce(
|
||||
- [](std::vector<uint8_t>) {}, std::move(writable_buffer)));
|
||||
- } else {
|
||||
- for (size_t i = 0; i < num_planes; ++i)
|
||||
- user_ptrs[i] = frame.writable_data(i);
|
||||
- }
|
||||
-
|
||||
for (size_t i = 0; i < num_planes; ++i) {
|
||||
int bytes_used =
|
||||
- VideoFrame::PlaneSize(frame.format(), i, input_config_.size)
|
||||
+ VideoFrame::PlaneSize(job_record->input_frame->format(), i,
|
||||
+ input_config_.size)
|
||||
.GetArea();
|
||||
buffer.SetPlaneBytesUsed(i, bytes_used);
|
||||
+ user_ptrs[i] = const_cast<uint8_t*>(job_record->input_frame->data(i));
|
||||
}
|
||||
if (!std::move(buffer).QueueUserPtr(user_ptrs)) {
|
||||
VPLOGF(1) << "Failed to queue a DMABUF buffer to input queue";
|
||||
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
|
||||
index 56389ea3eec08..d452ba48a69e2 100644
|
||||
--- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
|
||||
+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
|
||||
@@ -783,7 +783,7 @@ void V4L2VideoEncodeAccelerator::EncodeTask(scoped_refptr<VideoFrame> frame,
|
||||
const bool is_expected_storage_type =
|
||||
native_input_mode_
|
||||
? frame->storage_type() == VideoFrame::STORAGE_GPU_MEMORY_BUFFER
|
||||
- : frame->storage_type() == VideoFrame::STORAGE_SHMEM;
|
||||
+ : frame->IsMappable();
|
||||
if (!is_expected_storage_type) {
|
||||
VLOGF(1) << "Unexpected storage: "
|
||||
<< VideoFrame::StorageTypeToString(frame->storage_type());
|
||||
@@ -1392,27 +1392,16 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord(
|
||||
NOTIFY_ERROR(kPlatformFailureError);
|
||||
}
|
||||
|
||||
- // TODO(b/243883312): This copies the video frame to a writable buffer
|
||||
- // since the USERPTR API requires writable permission. Remove this
|
||||
- // workaround once the unreasonable permission is fixed.
|
||||
- const size_t buffer_size = frame->shm_region()->GetSize();
|
||||
- std::vector<uint8_t> writable_buffer(buffer_size);
|
||||
- std::memcpy(writable_buffer.data(), frame->data(0), buffer_size);
|
||||
+ // The frame data is readable only and the driver doesn't actually write
|
||||
+ // the buffer. But USRPTR buffer needs void*. So const_cast<> is required.
|
||||
std::vector<void*> user_ptrs(num_planes);
|
||||
for (size_t i = 0; i < num_planes; ++i) {
|
||||
- const std::intptr_t plane_offset =
|
||||
- reinterpret_cast<std::intptr_t>(frame->data(i)) -
|
||||
- reinterpret_cast<std::intptr_t>(frame->data(0));
|
||||
- user_ptrs[i] = writable_buffer.data() + plane_offset;
|
||||
+ user_ptrs[i] = const_cast<uint8_t*>(frame->data(i));
|
||||
}
|
||||
-
|
||||
if (!std::move(input_buf).QueueUserPtr(std::move(user_ptrs))) {
|
||||
- VPLOGF(1) << "Failed to queue a USRPTR buffer to input queue";
|
||||
- NOTIFY_ERROR(kPlatformFailureError);
|
||||
+ VPLOGF(1) << "Failed queue a USRPTR buffer to input queue";
|
||||
return false;
|
||||
}
|
||||
- frame->AddDestructionObserver(
|
||||
- base::DoNothingWithBoundArgs(std::move(writable_buffer)));
|
||||
break;
|
||||
}
|
||||
case V4L2_MEMORY_DMABUF: {
|
||||
@@ -1421,6 +1410,7 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord(
|
||||
VPLOGF(1) << "Failed queue a DMABUF buffer to input queue";
|
||||
return false;
|
||||
}
|
||||
+
|
||||
// Keep |gmb_handle| alive as long as |frame| is alive so that fds passed
|
||||
// to the driver are valid during encoding.
|
||||
frame->AddDestructionObserver(base::BindOnce(
|
@ -1,3 +1,3 @@
|
||||
SHA512 (node-v16.17.0-linux-x64.tar.xz) = aedfeeb71420a7fbcb07fbc4c5d2ba74ffe4f88c15998809346a84148132ec866dbae4e848531a2a77ca41413f442e1046f981d4f188bdf667faf88069aa28cd
|
||||
SHA512 (node-v16.17.0-linux-arm64.tar.xz) = ae4aabc2389779c9e1b4a15622cae3ba50e0c313ca3d7a1dc7b2344df06ade1f303d6a75b941d37e2a0ef368cf047c862a822a893684494f55446afd6ab0610e
|
||||
SHA512 (chromium-110.0.5481.177-clean.tar.xz) = 3cc3fe325bf773e5da9137272741eda61ca620289a27c1bc16cd3e165f5adc6ebaa00139351c324fcc491497e47659188673edd9b7fd33a2771636d153b69213
|
||||
SHA512 (chromium-111.0.5563.50-clean.tar.xz) = 4576e080a55cc1dabf65e14d5380310ee93bfe50e40823adb963bf47d3bbe668b39ef41c3f5e7b8c2aebc8161915926a2f6b37c39cc0289898e515e600743e3c
|
||||
|
Loading…
Reference in new issue