// Signature format: 2.0
package com.android.server.scheduling {

  public class RebootStats {
    ctor public RebootStats();
    method public long getReadyTimeMs();
    method public long getStartTimeMs();
    method public long getTimeUntilNextInteractionMs();
    method public int getTimesBlockedByAppActivity();
    method public int getTimesBlockedByInteractivity();
    method public int getTimesBlockedBySubsystems();
    method public void setReadyTimeMs(long);
    method public void setStartTimeMs(long);
    method public void setTimeUntilNextInteractionMs(long);
    method public void setTimesBlockedByAppActivity(int);
    method public void setTimesBlockedByInteractivity(int);
    method public void setTimesBlockedBySubsystems(int);
  }

  public class XmlParser {
    ctor public XmlParser();
    method public static com.android.server.scheduling.RebootStats read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
    method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
  }

  public class XmlWriter implements java.io.Closeable {
    ctor public XmlWriter(java.io.PrintWriter);
    method public void close();
    method public static void write(com.android.server.scheduling.XmlWriter, com.android.server.scheduling.RebootStats) throws java.io.IOException;
  }

}

