blob: f19e0b7373c7a8cd43a339cc0569f17d794934ad [file] [log] [blame]
/*
* Copyright (C) 2018 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.
*/
package com.android.powermodel;
import java.util.Set;
import java.util.HashSet;
import com.google.common.collect.ImmutableSet;
public class AttributionKey {
private final int mUid;
private final ImmutableSet<String> mPackages;
private final SpecialApp mSpecialApp;
public AttributionKey(SpecialApp specialApp) {
mUid = -1;
mPackages = ImmutableSet.of();
mSpecialApp = specialApp;
}
public AttributionKey(int uid, Set<String> packages) {
mUid = uid;
mPackages = ImmutableSet.copyOf(packages);
mSpecialApp = null;
}
public ImmutableSet<String> getPackages() {
return mPackages;
}
public boolean hasPackage(String pkg) {
return mPackages.contains(pkg);
}
public SpecialApp getSpecialApp() {
return mSpecialApp;
}
public boolean isSpecialApp() {
return mSpecialApp != null;
}
/**
* Returns the uid for this attribution, or -1 if there isn't one
* (e.g. if it is a special app).
*/
public int getUid() {
return mUid;
}
@Override
public int hashCode() {
int hash = 7;
hash = (31 * hash) + (mUid);
hash = (31 * hash) + (mPackages == null ? 0 : mPackages.hashCode());
hash = (31 * hash) + (mSpecialApp == null ? 0 : mSpecialApp.hashCode());
return hash;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null) {
return false;
}
if (this.getClass() != o.getClass()) {
return false;
}
final AttributionKey that = (AttributionKey)o;
return (this.mUid == that.mUid)
&& this.mPackages != null && this.mPackages.equals(that.mPackages)
&& this.mSpecialApp != null && this.mSpecialApp.equals(that.mSpecialApp);
}
@Override
public String toString() {
final StringBuilder str = new StringBuilder("AttributionKey(");
if (mUid >= 0) {
str.append(" uid=");
str.append(mUid);
}
if (mPackages.size() > 0) {
str.append(" packages=[");
for (String pkg: mPackages) {
str.append(' ');
str.append(pkg);
}
str.append(" ]");
}
if (mSpecialApp != null) {
str.append(" specialApp=");
str.append(mSpecialApp.name());
}
str.append(" )");
return str.toString();
}
}