Skip to content

Instantly share code, notes, and snippets.

@liyuqian
Created January 28, 2020 10:00
Show Gist options
  • Save liyuqian/c531746185e2f82ba7cd38077e3a2a77 to your computer and use it in GitHub Desktop.
Save liyuqian/c531746185e2f82ba7cd38077e3a2a77 to your computer and use it in GitHub Desktop.
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