Preheat oven to 350 degrees F.
Heat 1 tablespoon olive oil in a large skillet over medium heat. Add onions and cook, stirring occasionally, until softened and just beginning to caramelize, about 15 minutes.
Transfer onions to a plate. Add remaining 1 tablespoon olive oil to the skillet, then add mushrooms. Cook until browned and starting to crisp, about 8 minutes. Stir in spinach, a handful at a time, until wilted. Remove from heat.
In a large bowl, whisk together eggs, milk, heavy cream, salt and pepper.
Grease a 9-inch by 13-inch baking dish with cooking spray or butter. Layer in half of the croissant pieces. Top with onions, mushrooms and spinach, then sprinkle with half of the cheese.
Add remaining croissant pieces. Pour egg mixture evenly over the top and sprinkle with remaining cheese.
Cover with foil and bake for 30 minutes. Remove foil and bake for another 10 minutes, or until the top is golden and slightly crisp.
Let rest for 5 minutes before slicing and serving.