Heat oil in a wide skillet over medium heat until shimmering. Add diced onions and sauté for 5-7 minutes, stirring occasionally, until golden and fragrant.
Add minced garlic to the onions and cook for 30 seconds until fragrant, stirring constantly to prevent burning.
Stir in the spices: garam masala, turmeric, and chili powder. Toast them with the onion mixture for about 1 minute until fragrant, ensuring they don't burn.
Add the sliced mushrooms and cook on high heat for 8-10 minutes, stirring often, until they are deeply browned and start to caramelize, releasing a smoky aroma.
Add chopped tomatoes and cook for another 8-10 minutes, stirring occasionally, until the mixture thickens and the oil begins to separate from the gravy.
Gently fold in the paneer cubes, mixing to coat them in the flavorful gravy. Let simmer for 5 minutes to allow the paneer to absorb the spices.
Pour in the cream or coconut milk, if using, and stir gently to incorporate. Cook for another 2-3 minutes until the gravy is glossy and velvety.
Taste and adjust salt or spice levels as needed. The gravy should be rich, aromatic, and deep in color.
Remove from heat and garnish with chopped fresh coriander leaves, if desired. Serve hot with steamed rice or flatbread.