Loading packages/CrashRecovery/services/Android.bp +9 −1 Original line number Original line Diff line number Diff line Loading @@ -3,7 +3,15 @@ filegroup { srcs: [ srcs: [ "java/**/*.java", "java/**/*.java", "java/**/*.aidl", "java/**/*.aidl", ":statslog-crashrecovery-java-gen", ], ], path: "java", visibility: ["//frameworks/base:__subpackages__"], visibility: ["//frameworks/base:__subpackages__"], } } genrule { name: "statslog-crashrecovery-java-gen", tools: ["stats-log-api-gen"], cmd: "$(location stats-log-api-gen) --java $(out) --module crashrecovery " + "--javaPackage com.android.server.crashrecovery.proto --javaClass CrashRecoveryStatsLog --worksource", out: ["com/android/server/crashrecovery/proto/CrashRecoveryStatsLog.java"], } packages/CrashRecovery/services/java/com/android/server/RescueParty.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -46,11 +46,11 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.am.SettingsToPropertiesMapper; import com.android.server.am.SettingsToPropertiesMapper; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import java.io.File; import java.io.File; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -390,7 +390,7 @@ public class RescueParty { return; return; } } FrameworkStatsLog.write(FrameworkStatsLog.RESCUE_PARTY_RESET_REPORTED, level); CrashRecoveryStatsLog.write(CrashRecoveryStatsLog.RESCUE_PARTY_RESET_REPORTED, level); // Try our best to reset all settings possible, and once finished // Try our best to reset all settings possible, and once finished // rethrow any exception that we encountered // rethrow any exception that we encountered Exception res = null; Exception res = null; Loading packages/CrashRecovery/services/java/com/android/server/rollback/RollbackPackageHealthObserver.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -39,13 +39,13 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.SystemConfig; import com.android.server.SystemConfig; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import com.android.server.pm.ApexManager; import com.android.server.pm.ApexManager; import java.io.BufferedReader; import java.io.BufferedReader; Loading Loading @@ -418,7 +418,7 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver { final VersionedPackage logPackage = logPackageTemp; final VersionedPackage logPackage = logPackageTemp; WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); Consumer<Intent> onResult = result -> { Consumer<Intent> onResult = result -> { Loading @@ -430,19 +430,19 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver { int rollbackId = rollback.getRollbackId(); int rollbackId = rollback.getRollbackId(); saveStagedRollbackId(rollbackId, logPackage); saveStagedRollbackId(rollbackId, logPackage); WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } else { } else { WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } } } else { } else { WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } } Loading packages/CrashRecovery/services/java/com/android/server/rollback/WatchdogRollbackLogger.java +15 −15 Original line number Original line Diff line number Diff line Loading @@ -16,16 +16,16 @@ package com.android.server.rollback; package com.android.server.rollback; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; Loading @@ -42,8 +42,8 @@ import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import java.util.List; import java.util.List; import java.util.Set; import java.util.Set; Loading Loading @@ -197,8 +197,8 @@ public final class WatchdogRollbackLogger { + " rollbackReason: " + rollbackReasonToString(rollbackReason) + " rollbackReason: " + rollbackReasonToString(rollbackReason) + " failedPackageName: " + failingPackageName); + " failedPackageName: " + failingPackageName); if (logPackage != null) { if (logPackage != null) { FrameworkStatsLog.write( CrashRecoveryStatsLog.write( FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED, type, type, logPackage.getPackageName(), logPackage.getPackageName(), logPackage.getVersionCode(), logPackage.getVersionCode(), Loading @@ -208,8 +208,8 @@ public final class WatchdogRollbackLogger { } else { } else { // In the case that the log package is null, still log an empty string as an // In the case that the log package is null, still log an empty string as an // indication that retrieving the logging parent failed. // indication that retrieving the logging parent failed. FrameworkStatsLog.write( CrashRecoveryStatsLog.write( FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED, type, type, "", "", 0, 0, Loading Loading
packages/CrashRecovery/services/Android.bp +9 −1 Original line number Original line Diff line number Diff line Loading @@ -3,7 +3,15 @@ filegroup { srcs: [ srcs: [ "java/**/*.java", "java/**/*.java", "java/**/*.aidl", "java/**/*.aidl", ":statslog-crashrecovery-java-gen", ], ], path: "java", visibility: ["//frameworks/base:__subpackages__"], visibility: ["//frameworks/base:__subpackages__"], } } genrule { name: "statslog-crashrecovery-java-gen", tools: ["stats-log-api-gen"], cmd: "$(location stats-log-api-gen) --java $(out) --module crashrecovery " + "--javaPackage com.android.server.crashrecovery.proto --javaClass CrashRecoveryStatsLog --worksource", out: ["com/android/server/crashrecovery/proto/CrashRecoveryStatsLog.java"], }
packages/CrashRecovery/services/java/com/android/server/RescueParty.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -46,11 +46,11 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.am.SettingsToPropertiesMapper; import com.android.server.am.SettingsToPropertiesMapper; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import java.io.File; import java.io.File; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -390,7 +390,7 @@ public class RescueParty { return; return; } } FrameworkStatsLog.write(FrameworkStatsLog.RESCUE_PARTY_RESET_REPORTED, level); CrashRecoveryStatsLog.write(CrashRecoveryStatsLog.RESCUE_PARTY_RESET_REPORTED, level); // Try our best to reset all settings possible, and once finished // Try our best to reset all settings possible, and once finished // rethrow any exception that we encountered // rethrow any exception that we encountered Exception res = null; Exception res = null; Loading
packages/CrashRecovery/services/java/com/android/server/rollback/RollbackPackageHealthObserver.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -39,13 +39,13 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.FailureReasons; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import com.android.server.SystemConfig; import com.android.server.SystemConfig; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import com.android.server.pm.ApexManager; import com.android.server.pm.ApexManager; import java.io.BufferedReader; import java.io.BufferedReader; Loading Loading @@ -418,7 +418,7 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver { final VersionedPackage logPackage = logPackageTemp; final VersionedPackage logPackage = logPackageTemp; WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); Consumer<Intent> onResult = result -> { Consumer<Intent> onResult = result -> { Loading @@ -430,19 +430,19 @@ final class RollbackPackageHealthObserver implements PackageHealthObserver { int rollbackId = rollback.getRollbackId(); int rollbackId = rollback.getRollbackId(); saveStagedRollbackId(rollbackId, logPackage); saveStagedRollbackId(rollbackId, logPackage); WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } else { } else { WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } } } else { } else { WatchdogRollbackLogger.logEvent(logPackage, WatchdogRollbackLogger.logEvent(logPackage, FrameworkStatsLog CrashRecoveryStatsLog .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE, .WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE, reasonToLog, failedPackageToLog); reasonToLog, failedPackageToLog); } } Loading
packages/CrashRecovery/services/java/com/android/server/rollback/WatchdogRollbackLogger.java +15 −15 Original line number Original line Diff line number Diff line Loading @@ -16,16 +16,16 @@ package com.android.server.rollback; package com.android.server.rollback; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_CRASH; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_APP_NOT_RESPONDING; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_EXPLICIT_HEALTH_CHECK; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_NATIVE_CRASH_DURING_BOOT; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_REASON__REASON_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_BOOT_TRIGGERED; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_FAILURE; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_INITIATE; import static com.android.internal.util.FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS; import static com.android.server.crashrecovery.proto.CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED__ROLLBACK_TYPE__ROLLBACK_SUCCESS; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; Loading @@ -42,8 +42,8 @@ import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FrameworkStatsLog; import com.android.server.PackageWatchdog; import com.android.server.PackageWatchdog; import com.android.server.crashrecovery.proto.CrashRecoveryStatsLog; import java.util.List; import java.util.List; import java.util.Set; import java.util.Set; Loading Loading @@ -197,8 +197,8 @@ public final class WatchdogRollbackLogger { + " rollbackReason: " + rollbackReasonToString(rollbackReason) + " rollbackReason: " + rollbackReasonToString(rollbackReason) + " failedPackageName: " + failingPackageName); + " failedPackageName: " + failingPackageName); if (logPackage != null) { if (logPackage != null) { FrameworkStatsLog.write( CrashRecoveryStatsLog.write( FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED, type, type, logPackage.getPackageName(), logPackage.getPackageName(), logPackage.getVersionCode(), logPackage.getVersionCode(), Loading @@ -208,8 +208,8 @@ public final class WatchdogRollbackLogger { } else { } else { // In the case that the log package is null, still log an empty string as an // In the case that the log package is null, still log an empty string as an // indication that retrieving the logging parent failed. // indication that retrieving the logging parent failed. FrameworkStatsLog.write( CrashRecoveryStatsLog.write( FrameworkStatsLog.WATCHDOG_ROLLBACK_OCCURRED, CrashRecoveryStatsLog.WATCHDOG_ROLLBACK_OCCURRED, type, type, "", "", 0, 0, Loading