1 // Copyright (C) 2017 The Android Open Source Project 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // 16 // Lists several combinations of Classes X Methods X Hotness: 17 // 18 // Class A-C: 19 // - Ensure method hotness overrides sorting by class_def_idx 20 // 21 // Method m_a : m_c 22 // - Ensure method hotness overrides sorting by method_id 23 // 24 // Method m_a$Hot$Enum$Bits 25 // - $X$Y$Z is an encoding of MethodHotness flags ($[Hot]$[Startup]$[Poststartup]) 26 // - The method name encoding matches the `profile` hotness. 27 // - Check all variations of the bits to make sure it sorts by hotness correctly. 28 // 29 30 class A { 31 // Note that every method has unique dex code (by using a unique string literal). 32 // This is to prevent dex/oat code deduping. Deduped methods do not get distinct bins. 33 void m_a$$$() { System.out.println("Don't dedupe me! A::m_a$$$"); } 34 void m_a$Hot$$() { System.out.println("Don't dedupe me! A::m_a$Hot$$"); } 35 void m_a$$Startup$() { System.out.println("Don't dedupe me! A::m_a$$Startup$"); } 36 void m_a$Hot$Startup$() { System.out.println("Don't dedupe me! A::m_a$Hot$Startup$"); } 37 void m_a$$$Poststartup() { System.out.println("Don't dedupe me! A::m_a$$$Poststartup"); } 38 void m_a$Hot$$Poststartup() { System.out.println("Don't dedupe me! A::m_a$Hot$$Poststartup"); } 39 void m_a$$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_a$$Startup$Poststartup"); } 40 void m_a$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_a$Hot$Startup$Poststartup"); } 41 void m_b$$$() { System.out.println("Don't dedupe me! A::m_b$$$"); } 42 void m_b$Hot$$() { System.out.println("Don't dedupe me! A::m_b$Hot$$"); } 43 void m_b$$Startup$() { System.out.println("Don't dedupe me! A::m_b$$Startup$"); } 44 void m_b$Hot$Startup$() { System.out.println("Don't dedupe me! A::m_b$Hot$Startup$"); } 45 void m_b$$$Poststartup() { System.out.println("Don't dedupe me! A::m_b$$$Poststartup"); } 46 void m_b$Hot$$Poststartup() { System.out.println("Don't dedupe me! A::m_b$Hot$$Poststartup"); } 47 void m_b$$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_b$$Startup$Poststartup"); } 48 void m_b$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_b$Hot$Startup$Poststartup"); } 49 void m_c$$$() { System.out.println("Don't dedupe me! A::m_c$$$"); } 50 void m_c$Hot$$() { System.out.println("Don't dedupe me! A::m_c$Hot$$"); } 51 void m_c$$Startup$() { System.out.println("Don't dedupe me! A::m_c$$Startup$"); } 52 void m_c$Hot$Startup$() { System.out.println("Don't dedupe me! A::m_c$Hot$Startup$"); } 53 void m_c$$$Poststartup() { System.out.println("Don't dedupe me! A::m_c$$$Poststartup"); } 54 void m_c$Hot$$Poststartup() { System.out.println("Don't dedupe me! A::m_c$Hot$$Poststartup"); } 55 void m_c$$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_c$$Startup$Poststartup"); } 56 void m_c$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! A::m_c$Hot$Startup$Poststartup"); } 57 } 58 class B { 59 void m_a$$$() { System.out.println("Don't dedupe me! B::m_a$$$"); } 60 void m_a$Hot$$() { System.out.println("Don't dedupe me! B::m_a$Hot$$"); } 61 void m_a$$Startup$() { System.out.println("Don't dedupe me! B::m_a$$Startup$"); } 62 void m_a$Hot$Startup$() { System.out.println("Don't dedupe me! B::m_a$Hot$Startup$"); } 63 void m_a$$$Poststartup() { System.out.println("Don't dedupe me! B::m_a$$$Poststartup"); } 64 void m_a$Hot$$Poststartup() { System.out.println("Don't dedupe me! B::m_a$Hot$$Poststartup"); } 65 void m_a$$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_a$$Startup$Poststartup"); } 66 void m_a$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_a$Hot$Startup$Poststartup"); } 67 void m_b$$$() { System.out.println("Don't dedupe me! B::m_b$$$"); } 68 void m_b$Hot$$() { System.out.println("Don't dedupe me! B::m_b$Hot$$"); } 69 void m_b$$Startup$() { System.out.println("Don't dedupe me! B::m_b$$Startup$"); } 70 void m_b$Hot$Startup$() { System.out.println("Don't dedupe me! B::m_b$Hot$Startup$"); } 71 void m_b$$$Poststartup() { System.out.println("Don't dedupe me! B::m_b$$$Poststartup"); } 72 void m_b$Hot$$Poststartup() { System.out.println("Don't dedupe me! B::m_b$Hot$$Poststartup"); } 73 void m_b$$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_b$$Startup$Poststartup"); } 74 void m_b$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_b$Hot$Startup$Poststartup"); } 75 void m_c$$$() { System.out.println("Don't dedupe me! B::m_c$$$"); } 76 void m_c$Hot$$() { System.out.println("Don't dedupe me! B::m_c$Hot$$"); } 77 void m_c$$Startup$() { System.out.println("Don't dedupe me! B::m_c$$Startup$"); } 78 void m_c$Hot$Startup$() { System.out.println("Don't dedupe me! B::m_c$Hot$Startup$"); } 79 void m_c$$$Poststartup() { System.out.println("Don't dedupe me! B::m_c$$$Poststartup"); } 80 void m_c$Hot$$Poststartup() { System.out.println("Don't dedupe me! B::m_c$Hot$$Poststartup"); } 81 void m_c$$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_c$$Startup$Poststartup"); } 82 void m_c$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! B::m_c$Hot$Startup$Poststartup"); } 83 } 84 class C { 85 void m_a$$$() { System.out.println("Don't dedupe me! C::m_a$$$"); } 86 void m_a$Hot$$() { System.out.println("Don't dedupe me! C::m_a$Hot$$"); } 87 void m_a$$Startup$() { System.out.println("Don't dedupe me! C::m_a$$Startup$"); } 88 void m_a$Hot$Startup$() { System.out.println("Don't dedupe me! C::m_a$Hot$Startup$"); } 89 void m_a$$$Poststartup() { System.out.println("Don't dedupe me! C::m_a$$$Poststartup"); } 90 void m_a$Hot$$Poststartup() { System.out.println("Don't dedupe me! C::m_a$Hot$$Poststartup"); } 91 void m_a$$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_a$$Startup$Poststartup"); } 92 void m_a$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_a$Hot$Startup$Poststartup"); } 93 void m_b$$$() { System.out.println("Don't dedupe me! C::m_b$$$"); } 94 void m_b$Hot$$() { System.out.println("Don't dedupe me! C::m_b$Hot$$"); } 95 void m_b$$Startup$() { System.out.println("Don't dedupe me! C::m_b$$Startup$"); } 96 void m_b$Hot$Startup$() { System.out.println("Don't dedupe me! C::m_b$Hot$Startup$"); } 97 void m_b$$$Poststartup() { System.out.println("Don't dedupe me! C::m_b$$$Poststartup"); } 98 void m_b$Hot$$Poststartup() { System.out.println("Don't dedupe me! C::m_b$Hot$$Poststartup"); } 99 void m_b$$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_b$$Startup$Poststartup"); } 100 void m_b$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_b$Hot$Startup$Poststartup"); } 101 void m_c$$$() { System.out.println("Don't dedupe me! C::m_c$$$"); } 102 void m_c$Hot$$() { System.out.println("Don't dedupe me! C::m_c$Hot$$"); } 103 void m_c$$Startup$() { System.out.println("Don't dedupe me! C::m_c$$Startup$"); } 104 void m_c$Hot$Startup$() { System.out.println("Don't dedupe me! C::m_c$Hot$Startup$"); } 105 void m_c$$$Poststartup() { System.out.println("Don't dedupe me! C::m_c$$$Poststartup"); } 106 void m_c$Hot$$Poststartup() { System.out.println("Don't dedupe me! C::m_c$Hot$$Poststartup"); } 107 void m_c$$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_c$$Startup$Poststartup"); } 108 void m_c$Hot$Startup$Poststartup() { System.out.println("Don't dedupe me! C::m_c$Hot$Startup$Poststartup"); } 109 } 110