Created
January 28, 2020 10:00
-
-
Save liyuqian/c531746185e2f82ba7cd38077e3a2a77 to your computer and use it in GitHub Desktop.
Suggested diff for https://github.com/flutter/engine/pull/15685
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/ui/window/pointer_data_packet.cc b/lib/ui/window/pointer_data_packet.cc | |
index bd2abd6f1..61f68c561 100644 | |
--- a/lib/ui/window/pointer_data_packet.cc | |
+++ b/lib/ui/window/pointer_data_packet.cc | |
@@ -20,8 +20,9 @@ void PointerDataPacket::SetPointerData(size_t i, const PointerData& data) { | |
memcpy(&data_[i * sizeof(PointerData)], &data, sizeof(PointerData)); | |
} | |
-void PointerDataPacket::GetPointerData(size_t i, PointerData* data) const { | |
- memcpy(data, &data_[i * sizeof(PointerData)], sizeof(PointerData)); | |
+const PointerData& PointerDataPacket::GetPointerData(size_t i) const { | |
+ const uint8_t* address = data_.data() + i * sizeof(PointerData); | |
+ return *reinterpret_cast<const PointerData*>(address); | |
} | |
} // namespace flutter | |
diff --git a/lib/ui/window/pointer_data_packet.h b/lib/ui/window/pointer_data_packet.h | |
index c73bd6a2f..c3d6924e6 100644 | |
--- a/lib/ui/window/pointer_data_packet.h | |
+++ b/lib/ui/window/pointer_data_packet.h | |
@@ -20,14 +20,14 @@ class PointerDataPacket { | |
PointerDataPacket(uint8_t* data, size_t num_bytes); | |
~PointerDataPacket(); | |
+ | |
void SetPointerData(size_t i, const PointerData& data); | |
- void GetPointerData(size_t i, PointerData* data) const; | |
+ const PointerData& GetPointerData(size_t i) const; | |
const std::vector<uint8_t>& data() const { return data_; } | |
+ int Count() const { return data_.size() / sizeof(PointerData); } | |
private: | |
std::vector<uint8_t> data_; | |
- | |
- FML_DISALLOW_COPY_AND_ASSIGN(PointerDataPacket); | |
}; | |
} // namespace flutter | |
diff --git a/shell/common/animator.cc b/shell/common/animator.cc | |
index 79a377531..e329d4e57 100644 | |
--- a/shell/common/animator.cc | |
+++ b/shell/common/animator.cc | |
@@ -78,21 +78,14 @@ void Animator::SetDimensionChangePending() { | |
void Animator::EnqueueTraceData(const PointerDataPacket& packet, | |
uint64_t trace_flow_id) { | |
- std::vector<PointerData> pointer_datas; | |
- size_t pointer_data_count = packet.data().size() / sizeof(PointerData); | |
- for (size_t i = 0; i < pointer_data_count; i++) { | |
- PointerData data; | |
- packet.GetPointerData(i, &data); | |
- pointer_datas.push_back(data); | |
- } | |
fml::TaskRunner::RunNowOrPostTask( | |
task_runners_.GetUITaskRunner(), | |
- [self = weak_factory_.GetWeakPtr(), pointer_datas, trace_flow_id] { | |
+ [self = weak_factory_.GetWeakPtr(), packet, trace_flow_id] { | |
if (!self) { | |
return; | |
} | |
- for (const auto& data : pointer_datas) { | |
- self->pointer_datas_.push_back(data); | |
+ for (int i = 0; i < packet.Count(); i += 1) { | |
+ self->pointer_datas_.push_back(packet.GetPointerData(i)); | |
} | |
self->trace_flow_ids_.push_back(trace_flow_id); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment