16ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn/* 26ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project 36ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * 46ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 56ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * you may not use this file except in compliance with the License. 66ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * You may obtain a copy of the License at 76ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * 86ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 96ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * 106ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 116ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 126ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * See the License for the specific language governing permissions and 146ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * limitations under the License. 156ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn */ 166ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 176ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackbornpackage com.android.server.am; 186ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 196ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackbornimport android.os.Binder; 20d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackbornimport android.os.SystemClock; 21d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackbornimport android.util.TimeUtils; 226ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 236ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn/** 246ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn * Represents a link between a content provider and client. 256ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn */ 26be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackbornpublic final class ContentProviderConnection extends Binder { 276ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public final ContentProviderRecord provider; 286ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public final ProcessRecord client; 29d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackborn public final long createTime; 306ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public int stableCount; 316ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public int unstableCount; 326ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn // The client of this connection is currently waiting for the provider to appear. 336ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn // Protected by the provider lock. 346ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public boolean waiting; 356ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn // The provider of this connection is now dead. 366ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public boolean dead; 376ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 386ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn // For debugging. 396ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public int numStableIncs; 406ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public int numUnstableIncs; 416ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 426ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public ContentProviderConnection(ContentProviderRecord _provider, ProcessRecord _client) { 436ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn provider = _provider; 446ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn client = _client; 45d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackborn createTime = SystemClock.elapsedRealtime(); 466ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 476ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 486ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public String toString() { 496ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn StringBuilder sb = new StringBuilder(128); 506ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append("ContentProviderConnection{"); 516ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn toShortString(sb); 526ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append('}'); 536ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn return sb.toString(); 546ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 556ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 566ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public String toShortString() { 576ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn StringBuilder sb = new StringBuilder(128); 586ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn toShortString(sb); 596ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn return sb.toString(); 606ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 616ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 626ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public String toClientString() { 636ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn StringBuilder sb = new StringBuilder(128); 646ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn toClientString(sb); 656ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn return sb.toString(); 666ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 676ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 686ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public void toShortString(StringBuilder sb) { 696ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(provider.toShortString()); 706ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append("->"); 716ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn toClientString(sb); 726ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 736ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn 746ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn public void toClientString(StringBuilder sb) { 756ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(client.toShortString()); 766ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(" s"); 776ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(stableCount); 786ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append("/"); 796ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(numStableIncs); 806ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(" u"); 816ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(unstableCount); 826ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append("/"); 836ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(numUnstableIncs); 846ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn if (waiting) { 856ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(" WAITING"); 866ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 876ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn if (dead) { 886ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn sb.append(" DEAD"); 896ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 90d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackborn long nowReal = SystemClock.elapsedRealtime(); 91d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackborn sb.append(" "); 92d9137ca87eba9fb1d6a49440691374c48bac0d50Dianne Hackborn TimeUtils.formatDuration(nowReal-createTime, sb); 936ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 946ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn} 95