blob: f484347233cdbdd135ca1dddb3d9387d7cffb998 [file] [log] [blame]
Przemyslaw Szczepaniak90d15d22013-06-14 12:02:53 +01001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16package android.speech.tts;
17
18import android.text.TextUtils;
19
20/**
21 * Writes data about a given speech synthesis request for V1 API to the event
22 * logs. The data that is logged includes the calling app, length of the
23 * utterance, speech rate / pitch, the latency, and overall time taken.
24 */
25class EventLoggerV1 extends AbstractEventLogger {
26 private final SynthesisRequest mRequest;
27
28 EventLoggerV1(SynthesisRequest request, int callerUid, int callerPid, String serviceApp) {
29 super(callerUid, callerPid, serviceApp);
30 mRequest = request;
31 }
32
33 @Override
34 protected void logFailure(int statusCode) {
35 // We don't report stopped syntheses because their overall
36 // total time spent will be inaccurate (will not correlate with
37 // the length of the utterance).
38 if (statusCode != TextToSpeechClient.Status.STOPPED) {
39 EventLogTags.writeTtsSpeakFailure(mServiceApp, mCallerUid, mCallerPid,
40 getUtteranceLength(), getLocaleString(),
41 mRequest.getSpeechRate(), mRequest.getPitch());
42 }
43 }
44
45 @Override
46 protected void logSuccess(long audioLatency, long engineLatency, long engineTotal) {
47 EventLogTags.writeTtsSpeakSuccess(mServiceApp, mCallerUid, mCallerPid,
48 getUtteranceLength(), getLocaleString(),
49 mRequest.getSpeechRate(), mRequest.getPitch(),
50 engineLatency, engineTotal, audioLatency);
51 }
52
53 /**
54 * @return the length of the utterance for the given synthesis, 0
55 * if the utterance was {@code null}.
56 */
57 private int getUtteranceLength() {
58 final String utterance = mRequest.getText();
59 return utterance == null ? 0 : utterance.length();
60 }
61
62 /**
63 * Returns a formatted locale string from the synthesis params of the
64 * form lang-country-variant.
65 */
66 private String getLocaleString() {
67 StringBuilder sb = new StringBuilder(mRequest.getLanguage());
68 if (!TextUtils.isEmpty(mRequest.getCountry())) {
69 sb.append('-');
70 sb.append(mRequest.getCountry());
71
72 if (!TextUtils.isEmpty(mRequest.getVariant())) {
73 sb.append('-');
74 sb.append(mRequest.getVariant());
75 }
76 }
77
78 return sb.toString();
79 }
80}