1 /* 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 */ 16 package android.speech.tts; 17 18 import android.text.TextUtils; 19 20 /** 21 * Writes data about a given speech synthesis request to the event logs. The data that is logged 22 * includes the calling app, length of the utterance, speech rate / pitch, the latency, and overall 23 * time taken. 24 */ 25 class EventLogger extends AbstractEventLogger { 26 private final SynthesisRequest mRequest; 27 EventLogger(SynthesisRequest request, int callerUid, int callerPid, String serviceApp)28 EventLogger(SynthesisRequest request, int callerUid, int callerPid, String serviceApp) { 29 super(callerUid, callerPid, serviceApp); 30 mRequest = request; 31 } 32 33 @Override logFailure(int statusCode)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 != TextToSpeech.STOPPED) { 39 EventLogTags.writeTtsSpeakFailure(mServiceApp, mCallerUid, mCallerPid, 40 getUtteranceLength(), getLocaleString(), 41 mRequest.getSpeechRate(), mRequest.getPitch()); 42 } 43 } 44 45 @Override logSuccess(long audioLatency, long engineLatency, long engineTotal)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 */ getUtteranceLength()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 */ getLocaleString()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 } 81