| OLD | NEW |
| 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 "ui/events/gesture_detection/velocity_tracker.h" | 5 #include "ui/events/gesture_detection/velocity_tracker.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "ui/events/gesture_detection/motion_event.h" | 10 #include "ui/events/gesture_detection/motion_event.h" |
| (...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 break; | 586 break; |
| 587 | 587 |
| 588 TimeDelta age = newest_movement.event_time - movement.event_time; | 588 TimeDelta age = newest_movement.event_time - movement.event_time; |
| 589 if (age > horizon) | 589 if (age > horizon) |
| 590 break; | 590 break; |
| 591 | 591 |
| 592 const Position& position = movement.GetPosition(id); | 592 const Position& position = movement.GetPosition(id); |
| 593 x[m] = position.x; | 593 x[m] = position.x; |
| 594 y[m] = position.y; | 594 y[m] = position.y; |
| 595 w[m] = ChooseWeight(index); | 595 w[m] = ChooseWeight(index); |
| 596 time[m] = -age.InSecondsF(); | 596 time[m] = -static_cast<float>(age.InSecondsF()); |
| 597 index = (index == 0 ? kHistorySize : index) - 1; | 597 index = (index == 0 ? kHistorySize : index) - 1; |
| 598 } while (++m < kHistorySize); | 598 } while (++m < kHistorySize); |
| 599 | 599 |
| 600 if (m == 0) | 600 if (m == 0) |
| 601 return false; // no data | 601 return false; // no data |
| 602 | 602 |
| 603 // Calculate a least squares polynomial fit. | 603 // Calculate a least squares polynomial fit. |
| 604 uint32_t degree = degree_; | 604 uint32_t degree = degree_; |
| 605 if (degree > m - 1) | 605 if (degree > m - 1) |
| 606 degree = m - 1; | 606 degree = m - 1; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 637 if (index == index_) { | 637 if (index == index_) { |
| 638 return 1.0f; | 638 return 1.0f; |
| 639 } | 639 } |
| 640 uint32_t next_index = (index + 1) % kHistorySize; | 640 uint32_t next_index = (index + 1) % kHistorySize; |
| 641 float delta_millis = | 641 float delta_millis = |
| 642 static_cast<float>((movements_[next_index].event_time - | 642 static_cast<float>((movements_[next_index].event_time - |
| 643 movements_[index].event_time).InMillisecondsF()); | 643 movements_[index].event_time).InMillisecondsF()); |
| 644 if (delta_millis < 0) | 644 if (delta_millis < 0) |
| 645 return 0.5f; | 645 return 0.5f; |
| 646 if (delta_millis < 10) | 646 if (delta_millis < 10) |
| 647 return 0.5f + delta_millis * 0.05; | 647 return 0.5f + delta_millis * 0.05f; |
| 648 | 648 |
| 649 return 1.0f; | 649 return 1.0f; |
| 650 } | 650 } |
| 651 | 651 |
| 652 case WEIGHTING_CENTRAL: { | 652 case WEIGHTING_CENTRAL: { |
| 653 // Weight points based on their age, weighing very recent and very old | 653 // Weight points based on their age, weighing very recent and very old |
| 654 // points less. | 654 // points less. |
| 655 // age 0ms: 0.5 | 655 // age 0ms: 0.5 |
| 656 // age 10ms: 1.0 | 656 // age 10ms: 1.0 |
| 657 // age 50ms: 1.0 | 657 // age 50ms: 1.0 |
| 658 // age 60ms: 0.5 | 658 // age 60ms: 0.5 |
| 659 float age_millis = | 659 float age_millis = |
| 660 static_cast<float>((movements_[index_].event_time - | 660 static_cast<float>((movements_[index_].event_time - |
| 661 movements_[index].event_time).InMillisecondsF()); | 661 movements_[index].event_time).InMillisecondsF()); |
| 662 if (age_millis < 0) | 662 if (age_millis < 0) |
| 663 return 0.5f; | 663 return 0.5f; |
| 664 if (age_millis < 10) | 664 if (age_millis < 10) |
| 665 return 0.5f + age_millis * 0.05; | 665 return 0.5f + age_millis * 0.05f; |
| 666 if (age_millis < 50) | 666 if (age_millis < 50) |
| 667 return 1.0f; | 667 return 1.0f; |
| 668 if (age_millis < 60) | 668 if (age_millis < 60) |
| 669 return 0.5f + (60 - age_millis) * 0.05; | 669 return 0.5f + (60 - age_millis) * 0.05f; |
| 670 | 670 |
| 671 return 0.5f; | 671 return 0.5f; |
| 672 } | 672 } |
| 673 | 673 |
| 674 case WEIGHTING_RECENT: { | 674 case WEIGHTING_RECENT: { |
| 675 // Weight points based on their age, weighing older points less. | 675 // Weight points based on their age, weighing older points less. |
| 676 // age 0ms: 1.0 | 676 // age 0ms: 1.0 |
| 677 // age 50ms: 1.0 | 677 // age 50ms: 1.0 |
| 678 // age 100ms: 0.5 | 678 // age 100ms: 0.5 |
| 679 float age_millis = | 679 float age_millis = |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 out_estimator->degree = state.degree; | 808 out_estimator->degree = state.degree; |
| 809 out_estimator->xcoeff[0] = state.xpos; | 809 out_estimator->xcoeff[0] = state.xpos; |
| 810 out_estimator->xcoeff[1] = state.xvel; | 810 out_estimator->xcoeff[1] = state.xvel; |
| 811 out_estimator->xcoeff[2] = state.xaccel / 2; | 811 out_estimator->xcoeff[2] = state.xaccel / 2; |
| 812 out_estimator->ycoeff[0] = state.ypos; | 812 out_estimator->ycoeff[0] = state.ypos; |
| 813 out_estimator->ycoeff[1] = state.yvel; | 813 out_estimator->ycoeff[1] = state.yvel; |
| 814 out_estimator->ycoeff[2] = state.yaccel / 2; | 814 out_estimator->ycoeff[2] = state.yaccel / 2; |
| 815 } | 815 } |
| 816 | 816 |
| 817 } // namespace ui | 817 } // namespace ui |
| OLD | NEW |