Codebase list mozc / 6c1b1cc
Suppress sending usage stats when discharging Note that this has no impact on OSS build, where usage stats is completely disabled. BUG= TEST= REF_BUG=19651870 REF_CL=112549643,113117528 REF_TIME=2016-01-20T15:32:38+09:00 REF_TIME_RAW=1453271558 +0900 Tsuyoshi Matsuzaki 8 years ago
11 changed file(s) with 71 addition(s) and 37 deletion(s). Raw diff Collapse all Expand all
5757 jobject g_connection_data_buffer;
5858 jobject g_dictionary_buffer;
5959
60 // Returns a job setting for usage stats job.
61 const Scheduler::JobSetting GetJobSetting() {
62 return Scheduler::JobSetting(
63 "UsageStatsTimer",
64 usage_stats::UsageStatsUploader::kDefaultScheduleInterval,
65 usage_stats::UsageStatsUploader::kDefaultScheduleMaxInterval,
66 usage_stats::UsageStatsUploader::kDefaultSchedulerDelay,
67 usage_stats::UsageStatsUploader::kDefaultSchedulerRandomDelay,
68 &usage_stats::UsageStatsUploader::Send,
69 NULL);
70 }
71
6072 // Adapter class to make a SessionHandlerInterface (held by this class)
6173 // singleton.
6274 // Must be accessed via mozc::Singleton<SessionHandlerSingletonAdapter>.
99111 ->AddObserver(Singleton<session::SessionUsageObserver>::get());
100112
101113 // Start usage stats timer.
102 using usage_stats::UsageStatsUploader;
103 mozc::Scheduler::AddJob(Scheduler::JobSetting(
104 "UsageStatsTimer",
105 UsageStatsUploader::kDefaultScheduleInterval,
106 UsageStatsUploader::kDefaultScheduleMaxInterval,
107 UsageStatsUploader::kDefaultSchedulerDelay,
108 UsageStatsUploader::kDefaultSchedulerRandomDelay,
109 &UsageStatsUploader::Send,
110 NULL));
114 mozc::Scheduler::AddJob(GetJobSetting());
111115 }
112116
113117 // Concrete implementation for MozcJni.evalCommand
168172 return env->NewStringUTF(Version::GetMozcVersion().c_str());
169173 }
170174
175 void JNICALL suppressSendingStats(JNIEnv *env,
176 jobject clazz,
177 jboolean suppress) {
178 const Scheduler::JobSetting &jobSetting = GetJobSetting();
179 const string &name = jobSetting.name();
180 const bool hasJob = mozc::Scheduler::HasJob(name);
181 if (suppress && hasJob) {
182 mozc::Scheduler::RemoveJob(name);
183 } else if (!suppress && !hasJob) {
184 mozc::Scheduler::AddJob(jobSetting);
185 }
186 }
187
171188 } // namespace
172189 } // namespace jni
173190 } // namespace mozc
189206 {"getVersion",
190207 "()Ljava/lang/String;",
191208 reinterpret_cast<void*>(&mozc::jni::getVersion)},
209 {"suppressSendingStats",
210 "(Z)V",
211 reinterpret_cast<void*>(&mozc::jni::suppressSendingStats)},
192212 };
193213 jclass clazz = env->FindClass(
194214 "org/mozc/android/inputmethod/japanese/session/MozcJNI");
109109 * @return Version string of shared object
110110 */
111111 private static native String getVersion();
112
113 /**
114 * Sets suppression policy against sending usage stats.
115 *
116 * <p>Never call this method before JNI is loaded.
117 *
118 * @param suppress suppresses sending if true
119 */
120 private static native void suppressSendingStats(boolean suppress);
112121 }
255255 return (jobs_.erase(name) != 0);
256256 }
257257
258 virtual bool HasJob(const string &name) const {
259 return (jobs_.find(name) != jobs_.end());
260 }
261
258262 private:
259263 static void TimerCallback(void *param) {
260264 Job *job = reinterpret_cast<Job *>(param);
286290 }
287291 }
288292
289 bool HasJob(const string &name) const {
290 return (jobs_.find(name) != jobs_.end());
291 }
292
293293 uint32 CalcDelay(const Scheduler::JobSetting &job_setting) {
294294 uint32 delay = job_setting.delay_start();
295295 if (job_setting.random_delay() != 0) {
327327 GetSchedulerHandler()->RemoveAllJobs();
328328 }
329329
330 bool Scheduler::HasJob(const string &name) {
331 return GetSchedulerHandler()->HasJob(name);
332 }
333
330334 void Scheduler::SetSchedulerHandler(SchedulerInterface *handler) {
331335 g_scheduler_handler = handler;
332336 }
105105 // stop all jobs
106106 static void RemoveAllJobs();
107107
108 // returns true is the job has been registered.
109 static bool HasJob(const string &name);
110
108111 // This function is provided for test.
109112 // The behavior of scheduler can be customized by replacing an underlying
110113 // helper class inside this.
119122 virtual bool AddJob(const JobSetting &job_setting) = 0;
120123 virtual bool RemoveJob(const string &name) = 0;
121124 virtual void RemoveAllJobs() = 0;
125 virtual bool HasJob(const string &name) const = 0;
122126 };
123127
124128 private:
5757 jobs_.clear();
5858 }
5959
60 bool SchedulerStub::HasJob(const string &name) const {
61 return (jobs_.find(name) != jobs_.end());
62 }
63
6064 void SchedulerStub::PutClockForward(uint64 delta_usec) {
6165 for (map<string, JobForStub>::iterator itr = jobs_.begin();
6266 itr != jobs_.end(); ++itr) {
5858 virtual bool AddJob(const Scheduler::JobSetting &job_setting);
5959 virtual bool RemoveJob(const string &name);
6060 virtual void RemoveAllJobs();
61 virtual bool HasJob(const string &name) const;
6162
6263 // Puts stub internal clock forward.
6364 // Jobs will be executed according to forwarded time.
5656
5757 TEST_F(SchedulerStubTest, AddRemoveJob) {
5858 SchedulerStub scheduler_stub;
59 EXPECT_FALSE(scheduler_stub.HasJob("Test"));
5960 scheduler_stub.AddJob(Scheduler::JobSetting(
6061 "Test", 1000, 100000, 5000, 0, &TestFunc, NULL));
62 EXPECT_TRUE(scheduler_stub.HasJob("Test"));
6163 EXPECT_EQ(0, g_counter);
6264 scheduler_stub.PutClockForward(1000);
6365 EXPECT_EQ(0, g_counter);
8183 EXPECT_EQ(3, g_counter);
8284 scheduler_stub.PutClockForward(1000);
8385 EXPECT_EQ(3, g_counter);
86 EXPECT_FALSE(scheduler_stub.HasJob("Test"));
8487 }
8588
8689 TEST_F(SchedulerStubTest, BackOff) {
265265 bool AddJob(const Scheduler::JobSetting &job_setting) {
266266 return (expected_name_ == job_setting.name());
267267 }
268 bool HasJob(const string &name) const { return expected_name_ == name; }
268269
269270 private:
270271 const string expected_name_;
00 MAJOR=2
11 MINOR=17
2 BUILD=2418
2 BUILD=2419
33 REVISION=102
44 # NACL_DICTIONARY_VERSION is the target version of the system dictionary to be
55 # downloaded by NaCl Mozc.
4747 job_settings_.push_back(job_setting);
4848 return true;
4949 }
50 bool HasJob(const string &name) const {
51 for (size_t i = 0; i < job_settings_.size(); ++i) {
52 if (job_settings_[i].name() == name) {
53 return true;
54 }
55 }
56 return false;
57 }
5058 const vector<Scheduler::JobSetting> &job_settings() const {
5159 return job_settings_;
5260 }
5462 private:
5563 vector<Scheduler::JobSetting> job_settings_;
5664 };
57
58 bool FindJobByName(const vector<Scheduler::JobSetting> &job_settings,
59 const string &job_name) {
60 for (size_t i = 0; i < job_settings.size(); ++i) {
61 if (job_settings[i].name() == job_name) {
62 return true;
63 }
64 }
65 return false;
66 }
6765 } // namespace
6866 class SessionServerTest : public testing::Test {
6967 protected:
7674 std::unique_ptr<JobRecorder> job_recorder(new JobRecorder);
7775 Scheduler::SetSchedulerHandler(job_recorder.get());
7876 std::unique_ptr<SessionServer> session_server(new SessionServer);
79 const vector<Scheduler::JobSetting> &job_settings =
80 job_recorder->job_settings();
81 EXPECT_LE(2, job_settings.size());
82 EXPECT_TRUE(FindJobByName(job_settings, "UsageStatsTimer"));
83 EXPECT_TRUE(FindJobByName(job_settings, "SaveCachedStats"));
77 EXPECT_LE(2, job_recorder->job_settings().size());
78 EXPECT_TRUE(job_recorder->HasJob("UsageStatsTimer"));
79 EXPECT_TRUE(job_recorder->HasJob("SaveCachedStats"));
8480 Scheduler::SetSchedulerHandler(NULL);
8581 }
8682 } // namespace mozc
234234 const uint32 UsageStatsUploader::kDefaultSchedulerDelay = 60*1000;
235235 // 5 min
236236 const uint32 UsageStatsUploader::kDefaultSchedulerRandomDelay = 5*60*1000;
237 #ifndef OS_ANDROID
238237 // 5 min
239238 const uint32 UsageStatsUploader::kDefaultScheduleInterval = 5*60*1000;
240239 // 2 hours
241240 const uint32 UsageStatsUploader::kDefaultScheduleMaxInterval = 2*60*60*1000;
242 #else // !OS_ANDROID
243 // Reduce the frequency to save battery.
244 // 8 hours
245 const uint32 UsageStatsUploader::kDefaultScheduleInterval = 8*60*60*1000;
246 // 8 hours
247 const uint32 UsageStatsUploader::kDefaultScheduleMaxInterval = 8*60*60*1000;
248 #endif // !OS_ANDROID
249241
250242 void UsageStatsUploader::SetClientIdHandler(
251243 ClientIdInterface *client_id_handler) {