MERROR UsersManager:: haveAllUsersReleasedOrPreReleasedLocked() const { BitSet32 const consumer = mConsumerMap.mBitSetReleased | mConsumerMap.mBitSetPreReleased; if ( consumer.count() != mConsumerMap.size() ) { return UNKNOWN_ERROR; } // BitSet32 const producer = mProducerMap.mBitSetReleased | mProducerMap.mBitSetPreReleased; if ( producer.count() != mProducerMap.size() ) { return UNKNOWN_ERROR; } // return OK; }
void LegacyVelocityTrackerStrategy::addMovement(nsecs_t eventTime, BitSet32 idBits, const VelocityTracker::Position* positions) { if (++mIndex == HISTORY_SIZE) { mIndex = 0; } Movement& movement = mMovements[mIndex]; movement.eventTime = eventTime; movement.idBits = idBits; uint32_t count = idBits.count(); for (uint32_t i = 0; i < count; i++) { movement.positions[i] = positions[i]; } }
TEST_F(BitSet32Test, BitWiseOr) { b1.markBit(2); b2.markBit(4); BitSet32 tmp = b1 | b2; EXPECT_EQ(tmp.count(), 2u); EXPECT_TRUE(tmp.hasBit(2) && tmp.hasBit(4)); // Check that the operator is symmetric EXPECT_TRUE((b2 | b1) == (b1 | b2)); b1 |= b2; EXPECT_EQ(b1.count(), 2u); EXPECT_TRUE(b1.hasBit(2) && b1.hasBit(4)); EXPECT_TRUE(b2.hasBit(4) && b2.count() == 1u); }
void LeastSquaresVelocityTrackerStrategy::AddMovement( const TimeTicks& event_time, BitSet32 id_bits, const PointerXY* positions) { if (++index_ == kHistorySize) { index_ = 0; } Movement& movement = movements_[index_]; movement.event_time = event_time; movement.id_bits = id_bits; uint32_t count = id_bits.count(); for (uint32_t i = 0; i < count; i++) { movement.positions[i] = positions[i]; } }
void VelocityTracker::addMovement(nsecs_t eventTime, BitSet32 idBits, const Position* positions) { while (idBits.count() > MAX_POINTERS) { idBits.clearLastMarkedBit(); } if ((mCurrentPointerIdBits.value & idBits.value) && eventTime >= mLastEventTime + ASSUME_POINTER_STOPPED_TIME) { #if DEBUG_VELOCITY ALOGD("VelocityTracker: stopped for %0.3f ms, clearing state.", (eventTime - mLastEventTime) * 0.000001f); #endif // We have not received any movements for too long. Assume that all pointers // have stopped. mStrategy->clear(); } mLastEventTime = eventTime; mCurrentPointerIdBits = idBits; if (mActivePointerId < 0 || !idBits.hasBit(mActivePointerId)) { mActivePointerId = idBits.isEmpty() ? -1 : idBits.firstMarkedBit(); } mStrategy->addMovement(eventTime, idBits, positions); #if DEBUG_VELOCITY ALOGD("VelocityTracker: addMovement eventTime=%" PRId64 ", idBits=0x%08x, activePointerId=%d", eventTime, idBits.value, mActivePointerId); for (BitSet32 iterBits(idBits); !iterBits.isEmpty(); ) { uint32_t id = iterBits.firstMarkedBit(); uint32_t index = idBits.getIndexOfBit(id); iterBits.clearBit(id); Estimator estimator; getEstimator(id, &estimator); ALOGD(" %d: position (%0.3f, %0.3f), " "estimator (degree=%d, xCoeff=%s, yCoeff=%s, confidence=%f)", id, positions[index].x, positions[index].y, int(estimator.degree), vectorToString(estimator.xCoeff, estimator.degree + 1).c_str(), vectorToString(estimator.yCoeff, estimator.degree + 1).c_str(), estimator.confidence); } #endif }
TEST_F(BitSet32Test, BitWiseAnd_NonDisjoint) { b1.markBit(2); b1.markBit(4); b1.markBit(6); b2.markBit(3); b2.markBit(6); b2.markBit(9); BitSet32 tmp = b1 & b2; EXPECT_EQ(tmp.count(), 1u); EXPECT_TRUE(tmp.hasBit(6)); // Check that the operator is symmetric EXPECT_TRUE((b2 & b1) == (b1 & b2)); b1 &= b2; EXPECT_EQ(b1.count(), 1u); EXPECT_EQ(b2.count(), 3u); EXPECT_TRUE(b2.hasBit(3) && b2.hasBit(6) && b2.hasBit(9)); }
void VelocityTracker::AddMovement(const TimeTicks& event_time, BitSet32 id_bits, const PointerXY* positions) { while (id_bits.count() > MAX_POINTERS) id_bits.clear_last_marked_bit(); if ((current_pointer_id_bits_.value & id_bits.value) && (event_time - last_event_time_) >= base::TimeDelta::FromMilliseconds(kAssumePointerMoveStoppedTimeMs)) { // We have not received any movements for too long. Assume that all pointers // have stopped. strategy_->Clear(); } last_event_time_ = event_time; current_pointer_id_bits_ = id_bits; if (active_pointer_id_ < 0 || !id_bits.has_bit(active_pointer_id_)) active_pointer_id_ = id_bits.is_empty() ? -1 : id_bits.first_marked_bit(); strategy_->AddMovement(event_time, id_bits, positions); }