blob: f0af97204d7a3f37dfb3fd386dfd6ade9162e4c8 [file] [log] [blame]
// Copyright 2012 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include <gtest/gtest.h>
#include <json/value.h>
#include "include/interpreter.h"
#include "include/macros.h"
#include "include/prop_registry.h"
#include "include/tracer.h"
#ifndef GESTURES_FILTER_INTERPRETER_H__
#define GESTURES_FILTER_INTERPRETER_H__
namespace gestures {
// Interface for all filter interpreters.
class FilterInterpreter : public Interpreter, public GestureConsumer {
FRIEND_TEST(FilterInterpreterTest, DeadlineSettingNoDeadlines);
FRIEND_TEST(FilterInterpreterTest, DeadlineSettingLocalOnly);
FRIEND_TEST(FilterInterpreterTest, DeadlineSettingNextOnly);
FRIEND_TEST(FilterInterpreterTest, DeadlineSettingLocalBeforeNext);
FRIEND_TEST(FilterInterpreterTest, DeadlineSettingNextBeforeLocal);
public:
FilterInterpreter(PropRegistry* prop_reg,
Interpreter* next,
Tracer* tracer,
bool force_log_creation)
: Interpreter(prop_reg, tracer, force_log_creation) { next_.reset(next); }
virtual ~FilterInterpreter() {}
Json::Value EncodeCommonInfo();
void Clear();
virtual void Initialize(const HardwareProperties* hwprops,
Metrics* metrics, MetricsProperties* mprops,
GestureConsumer* consumer);
virtual void ConsumeGesture(const Gesture& gesture);
protected:
virtual void SyncInterpretImpl(HardwareState* hwstate, stime_t* timeout);
virtual void HandleTimerImpl(stime_t now, stime_t* timeout);
// When we need to call HandlerTimer on next_, or NO_DEADLINE if there's no
// outstanding timer for next_.
stime_t next_timer_deadline_ = NO_DEADLINE;
// Sets the next timer deadline, taking into account the deadline needed for
// this interpreter and the one from the next in the chain.
stime_t SetNextDeadlineAndReturnTimeoutVal(stime_t now,
stime_t local_deadline,
stime_t next_timeout);
// Utility method for determining whether the timer callback is for this
// interpreter or one further down the chain.
bool ShouldCallNextTimer(stime_t local_deadline);
std::unique_ptr<Interpreter> next_;
private:
DISALLOW_COPY_AND_ASSIGN(FilterInterpreter);
};
} // namespace gestures
#endif // GESTURES_FILTER_INTERPRETER_H__