Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d47f0603 authored by Chi Zhang's avatar Chi Zhang Committed by Automerger Merge Worker
Browse files

Merge "Log telephony atoms to statsd." into rvc-dev am: da0712f8 am: e1a3bc94

Change-Id: I2c33c4edd9669d31701fa7baaf19d62bccd7d0b5
parents 064289c0 e1a3bc94
Loading
Loading
Loading
Loading
+84 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

syntax = "proto2";

package telephonyStatsLog;

option java_package = "com.android.internal.telephony";
option java_outer_classname = "PersistAtomsProto";

// Holds atoms to store on persist storage in case of power cycle or process crash.
// NOTE: using int64 rather than google.protobuf.Timestamp for timestamps simplifies implementation.
// Next id: 5
message PersistAtoms {
    /* Aggregated RAT usage during the call. */
    repeated RawVoiceCallRatUsage raw_voice_call_rat_usage = 1;

    /* Timestamp of last voice_call_rat_usages pull. */
    optional int64 raw_voice_call_rat_usage_pull_timestamp_millis = 2;

    /* Per call statistics and information. */
    repeated VoiceCallSession voice_call_session = 3;

    /* Timestamp of last voice_call_sessions pull. */
    optional int64 voice_call_session_pull_timestamp_millis = 4;
}

// The canonical versions of the following enums live in:
//   frameworks/base/core/proto/android/telephony/enums.proto
// The canonical versions of the following atoms live in:
//   frameworks/base/cmds/statsd/src/atoms.proto
// We cannot link against framework's and statsd's protolite libraries as it is "for test only".
// NOTE: StatsLog functions use int in place of enum

message VoiceCallSession {
    optional int32 bearer_at_start = 1;
    optional int32 bearer_at_end = 2;
    optional int32 direction = 3;
    optional int32 setup_duration = 4;
    optional bool setup_failed = 5;
    optional int32 disconnect_reason_code = 6;
    optional int32 disconnect_extra_code = 7;
    optional string disconnect_extra_message = 8;
    optional int32 rat_at_start = 9;
    optional int32 rat_at_end = 10;
    optional int64 rat_switch_count = 11;
    optional int64 codec_bitmask = 12;
    optional int32 concurrent_call_count_at_start = 13;
    optional int32 concurrent_call_count_at_end = 14;
    optional int32 sim_slot_index = 15;
    optional bool is_multi_sim = 16;
    optional bool is_esim = 17;
    optional int32 carrier_id = 18;
    optional bool srvcc_completed = 19;
    optional int64 srvcc_failure_count = 20;
    optional int64 srvcc_cancellation_count = 21;
    optional bool rtt_enabled = 22;
    optional bool is_emergency = 23;
    optional bool is_roaming = 24;

    // Internal use only
    optional int64 setup_begin_millis = 10001;
}

// Internal use only
message RawVoiceCallRatUsage {
    optional int32 carrier_id = 1;
    optional int32 rat = 2;
    optional int64 total_duration_millis = 3;
    optional int64 call_count = 4;
}
+6 −1
Original line number Diff line number Diff line
@@ -300,6 +300,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            // This is a hack to delay DIAL so that it is sent out to RIL only after
            // EVENT_SWITCH_RESULT is received. We've seen failures when adding a new call to
            // multi-way conference calls due to DIAL being sent out before SWITCH is processed
            // TODO: setup duration metrics won't capture this
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
@@ -328,7 +329,7 @@ public class GsmCdmaCallTracker extends CallTracker {
        }
        mHangupPendingMO = false;
        mMetrics.writeRilDial(mPhone.getPhoneId(), mPendingMO, clirMode, uusInfo);

        mPhone.getVoiceCallSessionStats().onRilDial(mPendingMO);

        if ( mPendingMO.getAddress() == null || mPendingMO.getAddress().length() == 0
                || mPendingMO.getAddress().indexOf(PhoneNumberUtils.WILD) >= 0) {
@@ -551,6 +552,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            Rlog.i("phone", "acceptCall: incoming...");
            // Always unmute when answering a new call
            setMute(false);
            mPhone.getVoiceCallSessionStats().onRilAcceptCall(mRingingCall.getConnections());
            mCi.acceptCall(obtainCompleteMessage());
        } else if (mRingingCall.getState() == GsmCdmaCall.State.WAITING) {
            if (isPhoneTypeGsm()) {
@@ -1084,6 +1086,7 @@ public class GsmCdmaCallTracker extends CallTracker {
        if (locallyDisconnectedConnections.size() > 0) {
            mMetrics.writeRilCallList(mPhone.getPhoneId(), locallyDisconnectedConnections,
                    getNetworkCountryIso());
            mPhone.getVoiceCallSessionStats().onRilCallListChanged(locallyDisconnectedConnections);
        }

        /* Disconnect any pending Handover connections */
@@ -1155,6 +1158,7 @@ public class GsmCdmaCallTracker extends CallTracker {
            if (conn != null) activeConnections.add(conn);
        }
        mMetrics.writeRilCallList(mPhone.getPhoneId(), activeConnections, getNetworkCountryIso());
        mPhone.getVoiceCallSessionStats().onRilCallListChanged(activeConnections);
    }

    private void handleRadioNotAvailable() {
@@ -1574,6 +1578,7 @@ public class GsmCdmaCallTracker extends CallTracker {
                mPhone.notifyPreciseCallStateChanged();
                mMetrics.writeRilCallList(mPhone.getPhoneId(), mDroppedDuringPoll,
                        getNetworkCountryIso());
                mPhone.getVoiceCallSessionStats().onRilCallListChanged(mDroppedDuringPoll);
                mDroppedDuringPoll.clear();
            break;

+1 −0
Original line number Diff line number Diff line
@@ -674,6 +674,7 @@ public class GsmCdmaConnection extends Connection {
        if (dc.audioQuality != mAudioCodec) {
            mAudioCodec = dc.audioQuality;
            mMetrics.writeAudioCodecGsmCdma(mOwner.getPhone().getPhoneId(), dc.audioQuality);
            mOwner.getPhone().getVoiceCallSessionStats().onAudioCodecChanged(this, dc.audioQuality);
        }

        // A null cnapName should be the same as ""
+2 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.gsm.GsmMmiCode;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.imsphone.ImsPhoneMmiCode;
import com.android.internal.telephony.metrics.VoiceCallSessionStats;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccCardStatus;
@@ -245,6 +246,7 @@ public class GsmCdmaPhone extends Phone {

        // phone type needs to be set before other initialization as other objects rely on it
        mPrecisePhoneType = precisePhoneType;
        mVoiceCallSessionStats = new VoiceCallSessionStats(mPhoneId, this);
        initOnce(ci);
        initRatSpecific(precisePhoneType);
        // CarrierSignalAgent uses CarrierActionAgent in construction so it needs to be created
+14 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.metrics.VoiceCallSessionStats;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccFileHandler;
@@ -419,6 +420,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {

    private final CarrierPrivilegesTracker mCarrierPrivilegesTracker;

    protected VoiceCallSessionStats mVoiceCallSessionStats;

    public IccRecords getIccRecords() {
        return mIccRecords.get();
    }
@@ -4257,6 +4260,17 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return "";
    }

    /** Returns the {@link VoiceCallSessionStats} for this phone ID. */
    public VoiceCallSessionStats getVoiceCallSessionStats() {
        return mVoiceCallSessionStats;
    }

    /** Sets the {@link VoiceCallSessionStats} mock for this phone ID during unit testing. */
    @VisibleForTesting
    public void setVoiceCallSessionStats(VoiceCallSessionStats voiceCallSessionStats) {
        mVoiceCallSessionStats = voiceCallSessionStats;
    }

    /** @hide */
    public CarrierPrivilegesTracker getCarrierPrivilegesTracker() {
        return mCarrierPrivilegesTracker;
Loading