Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: content/browser/renderer_host/input/motion_event_android.cc

Issue 189693002: [Android] Cache additional MotionEvent bits in MotionEventAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final cleanup Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/input/motion_event_android.h" 5 #include "content/browser/renderer_host/input/motion_event_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "jni/MotionEvent_jni.h" 8 #include "jni/MotionEvent_jni.h"
9 9
10 using base::android::AttachCurrentThread; 10 using base::android::AttachCurrentThread;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 int64 ToAndroidTime(base::TimeTicks time) { 57 int64 ToAndroidTime(base::TimeTicks time) {
58 return (time - base::TimeTicks()).InMilliseconds(); 58 return (time - base::TimeTicks()).InMilliseconds();
59 } 59 }
60 60
61 base::TimeTicks FromAndroidTime(int64 time_ms) { 61 base::TimeTicks FromAndroidTime(int64 time_ms) {
62 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms); 62 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms);
63 } 63 }
64 64
65 } // namespace 65 } // namespace
66 66
67 MotionEventAndroid::MotionEventAndroid(JNIEnv* env, jobject event, bool recycle) 67 MotionEventAndroid::MotionEventAndroid(JNIEnv* env,
68 jobject event,
69 jlong time_ms,
70 jint android_action,
71 jint pointer_count,
72 jint history_size,
73 jint action_index,
74 jfloat pos_x_0,
75 jfloat pos_y_0,
76 jfloat pos_x_1,
77 jfloat pos_y_1,
78 jint pointer_id_0,
79 jint pointer_id_1,
80 jfloat touch_major_0,
81 jfloat touch_major_1)
82 : cached_time_(FromAndroidTime(time_ms)),
83 cached_action_(FromAndroidAction(android_action)),
84 cached_pointer_count_(pointer_count),
85 cached_history_size_(history_size),
86 cached_action_index_(action_index),
87 should_recycle_(false) {
88 DCHECK_GT(pointer_count, 0);
89 DCHECK_GE(history_size, 0);
90
91 event_.Reset(env, event);
92 DCHECK(event_.obj());
93
94 cached_positions_[0] = gfx::PointF(pos_x_0, pos_y_0);
95 cached_positions_[1] = gfx::PointF(pos_x_1, pos_y_1);
96 cached_pointer_ids_[0] = pointer_id_0;
97 cached_pointer_ids_[1] = pointer_id_1;
98 cached_touch_majors_[0] = touch_major_0;
99 cached_touch_majors_[1] = touch_major_1;
100 }
101
102 MotionEventAndroid::MotionEventAndroid(JNIEnv* env, jobject event)
68 : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))), 103 : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))),
69 cached_action_(FromAndroidAction( 104 cached_action_(FromAndroidAction(
70 Java_MotionEvent_getActionMasked(env, event))), 105 Java_MotionEvent_getActionMasked(env, event))),
71 cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)), 106 cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)),
72 cached_history_size_(Java_MotionEvent_getHistorySize(env, event)), 107 cached_history_size_(Java_MotionEvent_getHistorySize(env, event)),
73 cached_action_index_(Java_MotionEvent_getActionIndex(env, event)), 108 cached_action_index_(Java_MotionEvent_getActionIndex(env, event)),
74 cached_x_(Java_MotionEvent_getXF(env, event)), 109 should_recycle_(true) {
75 cached_y_(Java_MotionEvent_getYF(env, event)),
76 should_recycle_(recycle) {
77 event_.Reset(env, event); 110 event_.Reset(env, event);
78 DCHECK(event_.obj()); 111 DCHECK(event_.obj());
112
113 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
114 if (i < cached_pointer_count_) {
115 cached_positions_[i].set_x(Java_MotionEvent_getXF_I(env, event, i));
116 cached_positions_[i].set_y(Java_MotionEvent_getYF_I(env, event, i));
117 cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i);
118 cached_touch_majors_[i] =
119 Java_MotionEvent_getTouchMajorF_I(env, event, i);
120 } else {
121 cached_pointer_ids_[i] = 0;
122 cached_touch_majors_[i] = 0.f;
123 }
124 }
79 } 125 }
80 126
81 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other) 127 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
82 : event_(Obtain(other)), 128 : event_(Obtain(other)),
83 cached_time_(other.cached_time_), 129 cached_time_(other.cached_time_),
84 cached_action_(other.cached_action_), 130 cached_action_(other.cached_action_),
85 cached_pointer_count_(other.cached_pointer_count_), 131 cached_pointer_count_(other.cached_pointer_count_),
86 cached_history_size_(other.cached_history_size_), 132 cached_history_size_(other.cached_history_size_),
87 cached_action_index_(other.cached_action_index_), 133 cached_action_index_(other.cached_action_index_),
88 cached_x_(other.cached_x_),
89 cached_y_(other.cached_y_),
90 should_recycle_(true) { 134 should_recycle_(true) {
91 DCHECK(event_.obj()); 135 DCHECK(event_.obj());
136 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
137 cached_positions_[i] = other.cached_positions_[i];
138 cached_pointer_ids_[i] = other.cached_pointer_ids_[i];
139 cached_touch_majors_[i] = other.cached_touch_majors_[i];
140 }
92 } 141 }
93 142
94 MotionEventAndroid::~MotionEventAndroid() { 143 MotionEventAndroid::~MotionEventAndroid() {
95 if (should_recycle_) 144 if (should_recycle_)
96 Java_MotionEvent_recycle(AttachCurrentThread(), event_.obj()); 145 Java_MotionEvent_recycle(AttachCurrentThread(), event_.obj());
97 } 146 }
98 147
99 MotionEventAndroid::Action MotionEventAndroid::GetAction() const { 148 MotionEventAndroid::Action MotionEventAndroid::GetAction() const {
100 return cached_action_; 149 return cached_action_;
101 } 150 }
102 151
103 int MotionEventAndroid::GetActionIndex() const { 152 int MotionEventAndroid::GetActionIndex() const {
104 return cached_action_index_; 153 return cached_action_index_;
105 } 154 }
106 155
107 size_t MotionEventAndroid::GetPointerCount() const { 156 size_t MotionEventAndroid::GetPointerCount() const {
108 return cached_pointer_count_; 157 return cached_pointer_count_;
109 } 158 }
110 159
111 int MotionEventAndroid::GetPointerId(size_t pointer_index) const { 160 int MotionEventAndroid::GetPointerId(size_t pointer_index) const {
112 DCHECK_LT(pointer_index, cached_pointer_count_); 161 DCHECK_LT(pointer_index, cached_pointer_count_);
162 if (pointer_index < MAX_POINTERS_TO_CACHE)
163 return cached_pointer_ids_[pointer_index];
113 return Java_MotionEvent_getPointerId( 164 return Java_MotionEvent_getPointerId(
114 AttachCurrentThread(), event_.obj(), pointer_index); 165 AttachCurrentThread(), event_.obj(), pointer_index);
115 } 166 }
116 167
117 float MotionEventAndroid::GetX(size_t pointer_index) const { 168 float MotionEventAndroid::GetX(size_t pointer_index) const {
118 DCHECK_LT(pointer_index, cached_pointer_count_); 169 DCHECK_LT(pointer_index, cached_pointer_count_);
119 if (pointer_index == 0) 170 if (pointer_index < MAX_POINTERS_TO_CACHE)
120 return cached_x_; 171 return cached_positions_[pointer_index].x();
121 return Java_MotionEvent_getXF_I( 172 return Java_MotionEvent_getXF_I(
122 AttachCurrentThread(), event_.obj(), pointer_index); 173 AttachCurrentThread(), event_.obj(), pointer_index);
123 } 174 }
124 175
125 float MotionEventAndroid::GetY(size_t pointer_index) const { 176 float MotionEventAndroid::GetY(size_t pointer_index) const {
126 DCHECK_LT(pointer_index, cached_pointer_count_); 177 DCHECK_LT(pointer_index, cached_pointer_count_);
127 if (pointer_index == 0) 178 if (pointer_index < MAX_POINTERS_TO_CACHE)
128 return cached_y_; 179 return cached_positions_[pointer_index].y();
129 return Java_MotionEvent_getYF_I( 180 return Java_MotionEvent_getYF_I(
130 AttachCurrentThread(), event_.obj(), pointer_index); 181 AttachCurrentThread(), event_.obj(), pointer_index);
131 } 182 }
132 183
133 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const { 184 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const {
134 DCHECK_LT(pointer_index, cached_pointer_count_); 185 DCHECK_LT(pointer_index, cached_pointer_count_);
186 if (pointer_index < MAX_POINTERS_TO_CACHE)
187 return cached_touch_majors_[pointer_index];
135 return Java_MotionEvent_getTouchMajorF_I( 188 return Java_MotionEvent_getTouchMajorF_I(
136 AttachCurrentThread(), event_.obj(), pointer_index); 189 AttachCurrentThread(), event_.obj(), pointer_index);
137 } 190 }
138 191
139 float MotionEventAndroid::GetPressure(size_t pointer_index) const { 192 float MotionEventAndroid::GetPressure(size_t pointer_index) const {
140 DCHECK_LT(pointer_index, cached_pointer_count_); 193 DCHECK_LT(pointer_index, cached_pointer_count_);
141 return Java_MotionEvent_getPressureF_I( 194 return Java_MotionEvent_getPressureF_I(
142 AttachCurrentThread(), event_.obj(), pointer_index); 195 AttachCurrentThread(), event_.obj(), pointer_index);
143 } 196 }
144 197
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this)); 232 return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this));
180 } 233 }
181 234
182 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const { 235 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const {
183 return scoped_ptr<MotionEvent>(new MotionEventAndroid( 236 return scoped_ptr<MotionEvent>(new MotionEventAndroid(
184 AttachCurrentThread(), 237 AttachCurrentThread(),
185 Obtain(GetDownTime(), 238 Obtain(GetDownTime(),
186 GetEventTime(), 239 GetEventTime(),
187 MotionEventAndroid::ACTION_CANCEL, 240 MotionEventAndroid::ACTION_CANCEL,
188 GetX(0), 241 GetX(0),
189 GetY(0)).obj(), 242 GetY(0)).obj()));
190 true));
191 } 243 }
192 244
193 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const { 245 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
194 return Java_MotionEvent_getTouchMinorF_I( 246 return Java_MotionEvent_getTouchMinorF_I(
195 AttachCurrentThread(), event_.obj(), pointer_index); 247 AttachCurrentThread(), event_.obj(), pointer_index);
196 } 248 }
197 249
198 float MotionEventAndroid::GetOrientation() const { 250 float MotionEventAndroid::GetOrientation() const {
199 return Java_MotionEvent_getOrientationF(AttachCurrentThread(), event_.obj()); 251 return Java_MotionEvent_getOrientationF(AttachCurrentThread(), event_.obj());
200 } 252 }
(...skipping 25 matching lines...) Expand all
226 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(), 278 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(),
227 ToAndroidTime(down_time), 279 ToAndroidTime(down_time),
228 ToAndroidTime(event_time), 280 ToAndroidTime(event_time),
229 ToAndroidAction(action), 281 ToAndroidAction(action),
230 x, 282 x,
231 y, 283 y,
232 0); 284 0);
233 } 285 }
234 286
235 } // namespace content 287 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698